JavaScript ਕੈਨਵਸ ਵਿੱਚ ਚਿੱਤਰ ਰੋਟੇਸ਼ਨ ਨੂੰ ਸਮਝਣਾ
JavaScript ਕੈਨਵਸ 'ਤੇ ਚਿੱਤਰ ਰੋਟੇਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਨ ਨਾਲ ਅਕਸਰ ਅਣਉਚਿਤ ਪੇਚੀਦਗੀਆਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਇੱਕ ਆਮ ਸਮੱਸਿਆ ਉਦੋਂ ਆਉਂਦੀ ਹੈ ਜਦੋਂ ਚਿੱਤਰਾਂ ਨੂੰ ਘੁੰਮਾਇਆ ਜਾਂਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਚੱਟਾਨਾਂ ਜਾਂ ਹੋਰ ਵਸਤੂਆਂ, ਜਿਸਦੇ ਨਤੀਜੇ ਵਜੋਂ ਅਣਚਾਹੇ ਔਫਸੈੱਟ ਅਤੇ ਗਲਤ ਅਲਾਈਨਮੈਂਟ ਹੁੰਦੇ ਹਨ। ਇਹ ਸਹੀ ਟੱਕਰਾਂ ਅਤੇ ਸਹੀ ਸਥਿਤੀ ਵਾਲੇ ਟੁਕੜਿਆਂ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਨਾ ਵਧੇਰੇ ਮੁਸ਼ਕਲ ਬਣਾਉਂਦਾ ਹੈ। ਜੇ ਇਹ ਤੁਹਾਡੇ ਪ੍ਰੋਜੈਕਟ ਵਿੱਚ ਹੋਇਆ ਹੈ, ਤਾਂ ਤੁਸੀਂ ਇਕੱਲੇ ਨਹੀਂ ਹੋ।
ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ canvas API JavaScript ਵਿੱਚ ਮਜ਼ਬੂਤ ਰੈਂਡਰਿੰਗ ਸਮਰੱਥਾ ਨੂੰ ਸਮਰੱਥ ਬਣਾਉਂਦਾ ਹੈ, ਪਰ ਇਹ ਜਟਿਲਤਾ ਵੀ ਜੋੜਦਾ ਹੈ। ਜਦੋਂ ਤਸਵੀਰਾਂ ਨੂੰ ਘੁੰਮਾਇਆ ਜਾਂਦਾ ਹੈ, ਖਾਸ ਤੌਰ 'ਤੇ ਬੇਤਰਤੀਬ ਬਿੰਦੂਆਂ ਦੇ ਦੁਆਲੇ ਜਾਂ ਪਰਿਵਰਤਨਸ਼ੀਲ ਕੋਣਾਂ 'ਤੇ, ਆਫਸੈੱਟ ਵਿਕਸਿਤ ਹੋ ਸਕਦੇ ਹਨ, ਆਈਟਮ ਨੂੰ ਇਸਦੇ ਉਦੇਸ਼ ਕੇਂਦਰ ਤੋਂ ਦੂਰ ਬਦਲਦੇ ਹੋਏ। ਇਹ ਸਮਝਣਾ ਕਿ ਅਜਿਹਾ ਕਿਉਂ ਹੁੰਦਾ ਹੈ, ਸਮੱਸਿਆ ਨਾਲ ਨਜਿੱਠਣ ਲਈ ਮਹੱਤਵਪੂਰਨ ਹੈ।
ਕੈਨਵਸ ਡਰਾਇੰਗ ਫੰਕਸ਼ਨ ਦਾ ਅਨੁਵਾਦ ਅਤੇ ਰੋਟੇਸ਼ਨ ਨੂੰ ਸੰਭਾਲਣਾ ਇਸ ਆਫਸੈੱਟ ਦਾ ਮੁੱਖ ਕਾਰਨ ਹੈ। ਇਹ ਪ੍ਰਕਿਰਿਆਵਾਂ ਸਹੀ ਕ੍ਰਮ ਵਿੱਚ ਕੀਤੀਆਂ ਜਾਣੀਆਂ ਚਾਹੀਦੀਆਂ ਹਨ, ਅਤੇ ਕੋਈ ਵੀ ਤਰੁੱਟੀ ਤਸਵੀਰ ਨੂੰ ਇਸਦੇ ਉਦੇਸ਼ ਵਾਲੀ ਸਥਿਤੀ ਤੋਂ ਦੂਰ ਕਰਨ ਦਾ ਕਾਰਨ ਬਣ ਸਕਦੀ ਹੈ। ਇਹ ਗੇਮਾਂ ਜਾਂ ਗਤੀਸ਼ੀਲ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿੱਚ ਅਣਕਿਆਸੇ ਨਤੀਜੇ ਪੈਦਾ ਕਰ ਸਕਦਾ ਹੈ।
ਇਸ ਪਾਠ ਵਿੱਚ, ਅਸੀਂ ਇੱਕ ਆਮ ਸਮੱਸਿਆ ਨੂੰ ਵੇਖਾਂਗੇ ਜਿਸ ਵਿੱਚ ਇੱਕ ਚੱਟਾਨ ਚਿੱਤਰ ਨੂੰ ਬੇਤਰਤੀਬੇ ਰੂਪ ਵਿੱਚ ਘੁੰਮਾਇਆ ਜਾਂਦਾ ਹੈ ਪਰ ਗਲਤ ਤਰੀਕੇ ਨਾਲ ਆਫਸੈੱਟ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਅਸੀਂ ਕੋਡ ਨੂੰ ਕਦਮ-ਦਰ-ਕਦਮ ਦੇਖਾਂਗੇ, ਇਹ ਸਿੱਖਾਂਗੇ ਕਿ ਇਸਨੂੰ ਕਿਵੇਂ ਠੀਕ ਕਰਨਾ ਹੈ ਅਤੇ JavaScript ਕੈਨਵਸ ਵਿੱਚ ਘੁੰਮਾਏ ਗਏ ਚਿੱਤਰ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਕੇਂਦਰਿਤ ਕਰਨਾ ਹੈ।
ਹੁਕਮ | ਵਰਤੋਂ ਦੀ ਉਦਾਹਰਨ |
---|---|
ctx.save() | ਇਹ ਕਮਾਂਡ ਕੈਨਵਸ ਨੂੰ ਇਸਦੀ ਮੌਜੂਦਾ ਸਥਿਤੀ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਕਰਦੀ ਹੈ। ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਕਿਸੇ ਵੀ ਪਰਿਵਰਤਨ (ਜਿਵੇਂ ਕਿ ਅਨੁਵਾਦ ਅਤੇ ਰੋਟੇਸ਼ਨ) ਨੂੰ ਬਾਅਦ ਵਿੱਚ ctx.restore() ਨਾਲ ਉਲਟਾਇਆ ਜਾ ਸਕਦਾ ਹੈ, ਹੋਰ ਡਰਾਇੰਗਾਂ ਵਿੱਚ ਅਣਚਾਹੇ ਬਦਲਾਅ ਨੂੰ ਰੋਕਿਆ ਜਾ ਸਕਦਾ ਹੈ। |
ctx.restore() | ਇਹ ਕਮਾਂਡ ਕੈਨਵਸ ਸਥਿਤੀ ਨੂੰ ਬਹਾਲ ਕਰਦੀ ਹੈ ਜੋ ਪਹਿਲਾਂ ctx.save() ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਸੁਰੱਖਿਅਤ ਕੀਤੀ ਗਈ ਸੀ। ਵਰਤੇ ਗਏ ਪਰਿਵਰਤਨ (ਜਿਵੇਂ ਕਿ ਰੋਟੇਸ਼ਨ ਜਾਂ ਅਨੁਵਾਦ) ਨੂੰ ਰੀਸੈਟ ਕਰਨਾ ਮਹੱਤਵਪੂਰਨ ਹੈ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਣਾ ਕਿ ਹਰੇਕ ਆਈਟਮ ਪਿਛਲੇ ਪਰਿਵਰਤਨਾਂ ਤੋਂ ਸੁਤੰਤਰ ਤੌਰ 'ਤੇ ਖਿੱਚੀ ਗਈ ਹੈ। |
ctx.translate(x, y) | ਕੈਨਵਸ ਦੇ ਮੂਲ ਨੂੰ ਇੱਕ ਨਵੀਂ ਸਥਿਤੀ ਵਿੱਚ ਸ਼ਿਫਟ ਕਰਦਾ ਹੈ। ਇਸ ਸਥਿਤੀ ਵਿੱਚ, ਇਹ ਘੁੰਮਣ ਤੋਂ ਪਹਿਲਾਂ ਡਰਾਇੰਗ ਸਥਾਨ ਨੂੰ ਚੱਟਾਨ ਦੇ ਕੇਂਦਰ ਵਿੱਚ ਲੈ ਜਾਂਦਾ ਹੈ, ਇਸ ਗੱਲ ਦੀ ਗਾਰੰਟੀ ਦਿੰਦਾ ਹੈ ਕਿ ਚਿੱਤਰ ਇਸਦੇ ਆਪਣੇ ਕੇਂਦਰ ਵਿੱਚ ਘੁੰਮਦਾ ਹੈ। |
ctx.rotate(angle) | ਇਹ ਰੇਡੀਅਨ ਵਿੱਚ ਦਰਸਾਏ ਕੋਣ ਦੁਆਰਾ ਮੌਜੂਦਾ ਮੂਲ ਬਾਰੇ ਕੈਨਵਸ ਨੂੰ ਘੁੰਮਾਉਂਦਾ ਹੈ। ਇਹ ਰੌਕ ਚਿੱਤਰ 'ਤੇ ਨਿਰਧਾਰਤ ਰੋਟੇਸ਼ਨ ਨੂੰ ਲਾਗੂ ਕਰਦਾ ਹੈ। ਕੋਣ ਦੀ ਗਣਨਾ ਰੇਡੀਅਨ ਵਿੱਚ ਕੀਤੀ ਜਾਣੀ ਚਾਹੀਦੀ ਹੈ, ਜੋ ਸਹੀ ਰੋਟੇਸ਼ਨ ਲਈ ਮਹੱਤਵਪੂਰਨ ਹੈ। |
ctx.drawImage(image, x, y, width, height) | ਇਹ ਕਮਾਂਡ ਚਿੱਤਰ ਨੂੰ ਕੈਨਵਸ ਉੱਤੇ ਖਿੱਚਦੀ ਹੈ। ਪੈਰਾਮੀਟਰ ਸਥਿਤੀ ਅਤੇ ਮਾਪ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਦੇ ਹਨ। x ਅਤੇ y ਲਈ ਨਕਾਰਾਤਮਕ ਮੁੱਲ ਅਨੁਵਾਦ ਕੀਤੇ ਮੂਲ 'ਤੇ ਚਿੱਤਰ ਨੂੰ ਕੇਂਦਰਿਤ ਕਰਨ ਲਈ ਵਰਤੇ ਜਾਂਦੇ ਹਨ। |
describe() | ਟੈਸਟਿੰਗ ਫਰੇਮਵਰਕ (ਜਿਵੇਂ ਕਿ ਜੈਸਮੀਨ ਜਾਂ ਮੋਚਾ) ਇੱਕ ਫੰਕਸ਼ਨ ਪ੍ਰਦਾਨ ਕਰਦੇ ਹਨ ਜੋ ਤੁਹਾਨੂੰ ਸੰਬੰਧਿਤ ਟੈਸਟਾਂ ਨੂੰ ਇਕੱਠਾ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ। ਇਹ ਯੂਨਿਟ ਟੈਸਟਾਂ ਨੂੰ ਸੰਗਠਿਤ ਕਰਨ ਵਿੱਚ ਸਹਾਇਤਾ ਕਰਦਾ ਹੈ ਜੋ ਗਾਰੰਟੀ ਦਿੰਦੇ ਹਨ ਕਿ ਚੱਟਾਨ ਦੇ ਡਰਾਇੰਗ ਵਿਵਹਾਰ ਸਹੀ ਹੈ। |
it() | ਇਹ ਫੰਕਸ਼ਨ describe() ਸੈਕਸ਼ਨ ਦੇ ਅੰਦਰ ਇੱਕ ਸਿੰਗਲ ਟੈਸਟ ਕੇਸ ਬਣਾਉਂਦਾ ਹੈ। ਪੇਸ਼ ਕੀਤੇ ਗਏ ਟੈਸਟ ਵਿੱਚ, ਇਹ ਨਿਰਧਾਰਤ ਕਰਦਾ ਹੈ ਕਿ ਕੀ ਚੱਟਾਨ ਸਹੀ ਸਥਿਤੀ ਵਿੱਚ ਖਿੱਚੀ ਗਈ ਹੈ ਅਤੇ ਕੈਨਵਸ ਉੱਤੇ ਕੋਣ ਹੈ। |
expect() | ਇਹ ਅਨੁਮਾਨਿਤ ਨਤੀਜਾ ਨਿਰਧਾਰਤ ਕਰਨ ਲਈ ਯੂਨਿਟ ਟੈਸਟਾਂ ਵਿੱਚ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਇਹ ਇਹ ਦੇਖਣ ਲਈ ਜਾਂਚ ਕਰਦਾ ਹੈ ਕਿ ਕੀ ਕੋਈ ਖਾਸ ਸਥਿਤੀ (ਜਿਵੇਂ ਕਿ ਚਿੱਤਰ ਕੇਂਦਰਿਤ ਹੋਣਾ) ਸਹੀ ਹੈ, ਇਹ ਗਰੰਟੀ ਦਿੰਦਾ ਹੈ ਕਿ ਡਰਾਇੰਗ ਤਰਕ ਵੈਧ ਹੈ। |
Math.PI / 4 | ਇਹ JavaScript ਗਣਿਤਿਕ ਸਥਿਰਾਂਕ ਰੇਡੀਅਨ ਵਿੱਚ 45 ਡਿਗਰੀ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ। ਇਹ ਗਾਰੰਟੀ ਦੇਣ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ ਕਿ ਚੱਟਾਨ ਸਹੀ ਕੋਣ 'ਤੇ ਘੁੰਮਦੀ ਹੈ। ਗਰਾਫਿਕਸ ਪ੍ਰੋਗਰਾਮਿੰਗ ਵਿੱਚ, ਕੋਣਾਂ ਦੀ ਅਕਸਰ ਡਿਗਰੀ ਦੀ ਬਜਾਏ ਰੇਡੀਅਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਗਣਨਾ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। |
JavaScript ਕੈਨਵਸ ਵਿੱਚ ਚਿੱਤਰ ਰੋਟੇਸ਼ਨ ਅਤੇ ਆਫਸੈੱਟ ਫਿਕਸ ਕਰਨਾ
ਪੇਸ਼ਕਸ਼ ਕੀਤੀਆਂ ਸਕ੍ਰਿਪਟਾਂ ਦਾ ਉਦੇਸ਼ ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਕੈਨਵਸ ਵਿੱਚ ਵਸਤੂਆਂ, ਜਿਵੇਂ ਕਿ ਚੱਟਾਨਾਂ, ਨੂੰ ਡਰਾਇੰਗ ਕਰਦੇ ਸਮੇਂ ਤਸਵੀਰ ਰੋਟੇਸ਼ਨ ਆਫਸੈੱਟ ਦੇ ਮੁੱਦੇ ਨੂੰ ਹੱਲ ਕਰਨਾ ਹੈ। ਪਹਿਲੀ ਕੋਡਿੰਗ ਵਿੱਚ ਚੱਟਾਨ ਦੀ ਤਸਵੀਰ ਗਲਤ ਹੋ ਗਈ ਸੀ ਕਿਉਂਕਿ ਇਹ ਇਸਦੇ ਕੇਂਦਰ ਦੁਆਲੇ ਨਹੀਂ ਘੁੰਮ ਰਹੀ ਸੀ। ਇਸ ਨੂੰ ਹੱਲ ਕਰਨ ਲਈ, ਅਸੀਂ ਕੈਨਵਸ ਪਰਿਵਰਤਨ ਬਣਾਏ, ਖਾਸ ਤੌਰ 'ਤੇ ਅਨੁਵਾਦ ਕਰੋ ਅਤੇ ਘੁੰਮਾਓ ਹੁਕਮ. ਇਹ ਪਰਿਵਰਤਨ ਇਹ ਨਿਰਧਾਰਤ ਕਰਨ ਲਈ ਮਹੱਤਵਪੂਰਨ ਹਨ ਕਿ ਰੋਟੇਸ਼ਨ ਕਿੱਥੇ ਹੁੰਦੀ ਹੈ। ਦ ctx.translate() ਫੰਕਸ਼ਨ ਰੋਟੇਸ਼ਨ ਤੋਂ ਪਹਿਲਾਂ ਕੈਨਵਸ ਦੇ ਮੂਲ ਨੂੰ ਆਬਜੈਕਟ ਦੇ ਕੇਂਦਰ ਵਿੱਚ ਲੈ ਜਾਂਦਾ ਹੈ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਰੌਕ ਚਿੱਤਰ ਇੱਕ ਆਫਸੈੱਟ ਬਿੰਦੂ ਦੀ ਬਜਾਏ ਇਸਦੇ ਕੇਂਦਰ ਦੇ ਦੁਆਲੇ ਘੁੰਮਦਾ ਹੈ।
ਅੱਗੇ, ਅਸੀਂ ਵਰਤਦੇ ਹਾਂ ctx.rotate() ਕੈਨਵਸ ਨੂੰ ਇਸਦੇ ਮੌਜੂਦਾ ਮੂਲ ਦੇ ਦੁਆਲੇ ਘੁੰਮਾਉਣ ਲਈ, ਜੋ ਪਹਿਲਾਂ ਹੀ ਚੱਟਾਨ ਦੇ ਕੇਂਦਰ ਵਿੱਚ ਹੈ। ਇਹ ਚੱਟਾਨ ਨੂੰ ਸਥਿਤੀ ਬਦਲੇ ਬਿਨਾਂ ਘੁੰਮਣ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ। ਰੋਟੇਸ਼ਨ ਵਿੱਚ ਵਰਤਿਆ ਜਾਣ ਵਾਲਾ ਕੋਣ ਚੱਟਾਨ ਦੀ ਦਿਸ਼ਾ ਗੁਣ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਰੇਡੀਅਨ ਵਿੱਚ ਨਿਰਧਾਰਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਰੋਟੇਸ਼ਨ ਲਾਗੂ ਕਰਨ ਤੋਂ ਬਾਅਦ, ਅਸੀਂ ਕਾਲ ਕਰਦੇ ਹਾਂ ctx.drawImage() ਖਾਸ ਨਿਰਦੇਸ਼ਾਂਕ 'ਤੇ ਤਸਵੀਰ ਖਿੱਚਣ ਲਈ। x ਅਤੇ y ਕੋਆਰਡੀਨੇਟਸ ਲਈ ਨਕਾਰਾਤਮਕ ਮੁੱਲ ਦਾਖਲ ਕਰਕੇ, ਚਿੱਤਰ ਨੂੰ ਨਵੇਂ ਮੂਲ 'ਤੇ ਕੇਂਦਰਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਰੋਟੇਸ਼ਨ ਦ੍ਰਿਸ਼ਟੀਗਤ ਤੌਰ 'ਤੇ ਸਹੀ ਹੈ।
ਦੂਜੀ ਉਦਾਹਰਣ ਵਿੱਚ, ਅਸੀਂ ਇੱਕ ਨਵਾਂ ਫੰਕਸ਼ਨ ਨਾਮਕ ਬਣਾ ਕੇ ਕੋਡ ਨੂੰ ਮਾਡਿਊਲਰਾਈਜ਼ ਕੀਤਾ ਹੈ ਡਰਾਅ ਰੋਟੇਟਿਡ ਚਿੱਤਰ(). ਇਹ ਫੰਕਸ਼ਨ ਇੱਕ ਚਿੱਤਰ ਨੂੰ ਅਨੁਵਾਦ ਕਰਨ, ਘੁੰਮਾਉਣ ਅਤੇ ਖਿੱਚਣ ਲਈ ਲੋੜੀਂਦੇ ਤਰਕ ਨੂੰ ਸ਼ਾਮਲ ਕਰਦਾ ਹੈ, ਕੋਡ ਨੂੰ ਹੋਰ ਮੁੜ ਵਰਤੋਂ ਯੋਗ ਬਣਾਉਂਦਾ ਹੈ। ਇਹ ਹੋਰ ਵਸਤੂਆਂ ਨੂੰ ਸਮਰੱਥ ਬਣਾਉਂਦਾ ਹੈ, ਨਾ ਕਿ ਸਿਰਫ਼ ਚੱਟਾਨਾਂ ਨੂੰ, ਉਹਨਾਂ ਦੇ ਡਰਾਇੰਗ ਤਰਕ ਲਈ ਇਸ ਫੰਕਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ। ਚਿੰਤਾਵਾਂ ਦਾ ਇਹ ਵੱਖਰਾ ਡਰਾਇੰਗ ਤਰਕ ਨੂੰ ਮੁੱਖ ਆਬਜੈਕਟ ਵਿਧੀ ਤੋਂ ਬਾਹਰ ਲਿਜਾ ਕੇ ਕੋਡ ਦੀ ਸਪੱਸ਼ਟਤਾ ਨੂੰ ਵਧਾਉਂਦਾ ਹੈ। ਇਹ ਮਾਡਯੂਲਰ ਡਿਜ਼ਾਈਨ ਪ੍ਰੋਜੈਕਟ ਨੂੰ ਕਾਇਮ ਰੱਖਣ ਅਤੇ ਸਕੇਲ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ ਕਿਉਂਕਿ ਇਹ ਫੈਲਦਾ ਹੈ।
ਅੰਤ ਵਿੱਚ, ਇਕਾਈ ਟੈਸਟ ਸਕ੍ਰਿਪਟ ਨੂੰ ਇਹ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਜੋੜਿਆ ਗਿਆ ਸੀ ਕਿ ਚੱਟਾਨ ਦਾ ਡਰਾਇੰਗ ਤਰਕ ਸਹੀ ਢੰਗ ਨਾਲ ਕੰਮ ਕਰਦਾ ਹੈ। ਟੈਸਟ ਕਰਕੇ, ਅਸੀਂ ਇਹ ਯਕੀਨੀ ਬਣਾ ਸਕਦੇ ਹਾਂ ਕਿ ਚਿੱਤਰ ਨੂੰ ਸਹੀ ਥਾਂ ਅਤੇ ਕੋਣ 'ਤੇ ਪੇਸ਼ ਕੀਤਾ ਗਿਆ ਹੈ। ਟੈਸਟ ਸਕ੍ਰਿਪਟ ਇੱਕ ਫਰੇਮਵਰਕ ਜਿਵੇਂ ਕਿ ਜੈਸਮੀਨ ਜਾਂ ਮੋਚਾ ਨਾਲ ਉਮੀਦਾਂ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਦੀ ਹੈ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦੀ ਹੈ ਕਿ ਰੋਟੇਸ਼ਨ ਦੌਰਾਨ ਚੱਟਾਨ ਕੇਂਦਰਿਤ ਰਹੇ। ਇਹ ਟੈਸਟ-ਸੰਚਾਲਿਤ ਪਹੁੰਚ ਵਿਭਿੰਨ ਸੰਦਰਭਾਂ ਅਤੇ ਅੱਪਡੇਟਾਂ ਵਿੱਚ ਕੋਡ ਨੂੰ ਸਹੀ ਰੱਖਣ ਵਿੱਚ ਮਦਦ ਕਰਦੀ ਹੈ। ਮਾਡਯੂਲਰਿਟੀ, ਟੈਸਟਿੰਗ, ਅਤੇ ਕੈਨਵਸ ਸਟੇਟ ਪ੍ਰਬੰਧਨ ਵਰਗੇ ਵਧੀਆ ਅਭਿਆਸਾਂ ਨੂੰ ਜੋੜ ਕੇ, ਅਸੀਂ ਇੱਕ ਵਿੱਚ ਆਬਜੈਕਟ ਨੂੰ ਡਰਾਇੰਗ ਅਤੇ ਘੁੰਮਾਉਣ ਲਈ ਇੱਕ ਮਜ਼ਬੂਤ ਅਤੇ ਅਨੁਕੂਲਿਤ ਹੱਲ ਪ੍ਰਦਾਨ ਕਰਦੇ ਹਾਂ। ਕੈਨਵਸ ਵਾਤਾਵਰਣ.
ਅਨੁਵਾਦ ਅਤੇ ਰੋਟੇਸ਼ਨ ਸੁਧਾਰਾਂ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਕੈਨਵਸ ਵਿੱਚ ਰੋਟੇਸ਼ਨ ਆਫਸੈੱਟ ਫਿਕਸ ਕਰਨਾ
ਰੋਟੇਸ਼ਨ ਆਫਸੈੱਟ ਲਈ ਸੁਧਾਰਾਂ ਦੇ ਨਾਲ JavaScript ਕੈਨਵਸ ਹੱਲ
// First solution: Correcting the translation and rotation for centering the image Rock.prototype.draw = function() {
ctx.save(); // Save the current canvas state
ctx.translate(this.x - scrollX + this.w / 2, this.y - scrollY + this.h / 2); // Translate to the rock's center
ctx.rotate(this.dir); // Rotate around the center
ctx.drawImage(rockImage, -this.w / 2, -this.h / 2, this.w, this.h); // Draw the image centered
ctx.restore(); // Restore the original state to avoid affecting other drawings
};
// This method uses ctx.save and ctx.restore to manage canvas transformations efficiently.
// The key change is translating the canvas to the rock's center, then drawing the image offset from the center.
// This ensures the rock rotates correctly around its own center.
ਅਨੁਕੂਲਿਤ ਮਾਡਯੂਲਰ ਕੋਡ ਨਾਲ ਰੌਕ ਰੋਟੇਸ਼ਨ ਨੂੰ ਸੰਭਾਲਣਾ
ਮੋਡਿਊਲਰਿਟੀ ਅਤੇ ਰੋਟੇਸ਼ਨ ਲਈ ਵਧੀਆ ਅਭਿਆਸਾਂ ਦੇ ਨਾਲ JavaScript ਪਹੁੰਚ
// Second solution: A modular approach for reusability and better structure function drawRotatedImage(ctx, image, x, y, width, height, angle, scrollX, scrollY) {
ctx.save(); // Save the current state
ctx.translate(x - scrollX + width / 2, y - scrollY + height / 2); // Translate to the image's center
ctx.rotate(angle); // Apply rotation
ctx.drawImage(image, -width / 2, -height / 2, width, height); // Draw the image centered
ctx.restore(); // Restore the state
}
// Usage within the Rock object
Rock.prototype.draw = function() {
drawRotatedImage(ctx, rockImage, this.x, this.y, this.w, this.h, this.dir, scrollX, scrollY);
};
// This method improves code modularity and reusability by extracting the drawing logic into a separate function.
// It can be reused for any object that requires rotation, not just rocks.
ਰੋਟੇਟਿਡ ਚਿੱਤਰ ਸੈਂਟਰਿੰਗ ਅਤੇ ਪ੍ਰਦਰਸ਼ਨ ਅਨੁਕੂਲਨ ਲਈ ਯੂਨਿਟ ਟੈਸਟ
JavaScript ਕੈਨਵਸ ਰੋਟੇਸ਼ਨ ਲਈ ਯੂਨਿਟ ਟੈਸਟਿੰਗ, ਪ੍ਰਦਰਸ਼ਨ ਅਤੇ ਆਉਟਪੁੱਟ ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕਰਨਾ
// Third solution: Unit test to ensure the image is drawn correctly at all rotations describe('Rock Drawing Tests', function() {
it('should draw the rock centered and rotated correctly', function() {
const testCanvas = document.createElement('canvas');
const testCtx = testCanvas.getContext('2d');
const rock = new Rock(100, 100, 50, 50, Math.PI / 4); // A rock with 45 degrees rotation
rock.draw(testCtx);
// Assert that the image is correctly centered and rotated (pseudo-test, to be implemented)
expect(isImageCentered(testCtx)).toBe(true);
});
});
// This unit test ensures the drawing logic is working as expected, checking if the image is centered and rotated.
// Performance can also be evaluated by running multiple iterations and profiling render times.
ਸਟੀਕ ਟੱਕਰਾਂ ਲਈ ਕੈਨਵਸ ਵਿੱਚ ਆਬਜੈਕਟ ਰੋਟੇਸ਼ਨ ਵਿੱਚ ਸੁਧਾਰ ਕਰਨਾ
ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਸਮੇਂ ਵਧੇਰੇ ਚੁਣੌਤੀਪੂਰਨ ਚੁਣੌਤੀਆਂ ਵਿੱਚੋਂ ਇੱਕ JavaScript ਕੈਨਵਸ ਸਟੀਕ ਆਬਜੈਕਟ ਰੋਟੇਸ਼ਨ ਨਾਲ ਨਜਿੱਠ ਰਿਹਾ ਹੈ, ਖਾਸ ਕਰਕੇ ਜਦੋਂ ਲੱਭ ਰਹੇ ਹੋ ਸਹੀ ਟੱਕਰ ਖੋਜ. ਹਾਲਾਂਕਿ ਵਿਜ਼ੂਅਲ ਅਲਾਈਨਮੈਂਟ ਦੀਆਂ ਚਿੰਤਾਵਾਂ ਨੂੰ ਸਹੀ ਅਨੁਵਾਦਾਂ ਅਤੇ ਰੋਟੇਸ਼ਨਾਂ ਨਾਲ ਹੱਲ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਕਿ ਘੁੰਮਣ ਵਾਲੀਆਂ ਵਸਤੂਆਂ ਸਹੀ ਢੰਗ ਨਾਲ ਟਕਰਾਉਣ ਲਈ ਵਾਧੂ ਦੇਖਭਾਲ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਜਦੋਂ ਤੁਸੀਂ ਕਿਸੇ ਵਸਤੂ ਨੂੰ ਘੁੰਮਾਉਂਦੇ ਹੋ, ਤਾਂ ਇਸਦੇ ਬਾਰਡਰ ਜਾਂ ਹਿੱਟਬਾਕਸ ਹੁਣ ਇਸਦੇ ਵਿਜ਼ੂਅਲ ਚਿੱਤਰਣ ਦੇ ਨਾਲ ਮੇਲ ਨਹੀਂ ਖਾਂਦੇ, ਜਿਸ ਕਾਰਨ ਟੱਕਰਾਂ ਅਸਫਲ ਹੋ ਜਾਂਦੀਆਂ ਹਨ।
ਇਸ ਨੂੰ ਦੂਰ ਕਰਨ ਲਈ, ਸਾਨੂੰ ਆਬਜੈਕਟ ਦੇ ਚਿੱਤਰ ਅਤੇ ਇਸਦੇ ਕੋਲਾਈਡਰ ਜਾਂ ਬਾਊਂਡਿੰਗ ਬਾਕਸ ਦੋਵਾਂ ਨੂੰ ਘੁੰਮਾਉਣਾ ਚਾਹੀਦਾ ਹੈ। ਇਸ ਵਿੱਚ ਸਮਾਨ ਰੂਪਾਂਤਰਣ ਤਕਨੀਕਾਂ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਟੱਕਰ ਖੇਤਰ ਨੂੰ ਘੁੰਮਾਉਣਾ ਸ਼ਾਮਲ ਹੈ, ਜਿਵੇਂ ਕਿ ਰੋਟੇਸ਼ਨ ਐਂਗਲ ਦੇ ਅਧਾਰ ਤੇ ਕੋਲਾਈਡਰ ਦੇ ਕੋਨਿਆਂ ਨੂੰ ਅਪਡੇਟ ਕਰਨ ਲਈ ਇੱਕ ਮੈਟ੍ਰਿਕਸ ਦੀ ਵਰਤੋਂ ਕਰਨਾ। ਇਹ ਗਾਰੰਟੀ ਦਿੰਦਾ ਹੈ ਕਿ ਕੋਲਾਈਡਰ ਆਬਜੈਕਟ ਦੀ ਵਿਜ਼ੂਅਲ ਨੁਮਾਇੰਦਗੀ ਦੇ ਨਾਲ ਸਮਕਾਲੀਕਰਨ ਵਿੱਚ ਘੁੰਮਦਾ ਹੈ, ਟੱਕਰ ਖੋਜ ਦੀ ਸ਼ੁੱਧਤਾ ਨੂੰ ਸੁਰੱਖਿਅਤ ਰੱਖਦਾ ਹੈ। ਅਜਿਹਾ ਕਰਨ ਵਿੱਚ ਅਸਫਲਤਾ ਵਸਤੂਆਂ ਨੂੰ ਦ੍ਰਿਸ਼ਟੀਗਤ ਰੂਪ ਵਿੱਚ ਘੁੰਮਾਉਣ ਦਾ ਕਾਰਨ ਬਣਦੀ ਹੈ ਜਦੋਂ ਕਿ ਉਹਨਾਂ ਦਾ ਕੋਲਾਈਡਰ ਸਥਿਰ ਰਹਿੰਦਾ ਹੈ।
ਇਸ ਮੁੱਦੇ ਨੂੰ ਸੁਲਝਾਉਣ ਦਾ ਇੱਕ ਹੋਰ ਮਹੱਤਵਪੂਰਨ ਹਿੱਸਾ ਗੁੰਝਲਦਾਰ ਗਣਿਤ ਤਕਨੀਕਾਂ ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਹੈ ਜਿਵੇਂ ਕਿ ਤਿਕੋਣਮਿਤੀ ਨਵੀਂਆਂ ਕੋਲਾਈਡਰ ਸਥਿਤੀਆਂ ਦੀ ਸਹੀ ਢੰਗ ਨਾਲ ਗਣਨਾ ਕਰਨ ਲਈ। ਵਰਗੇ ਫੰਕਸ਼ਨਾਂ ਦੀ ਵਰਤੋਂ ਕਰਨਾ Math.cos() ਅਤੇ Math.sin(), ਅਸੀਂ ਰੋਟੇਸ਼ਨ ਤੋਂ ਬਾਅਦ ਕੋਲਾਈਡਰ ਦੇ ਹਰੇਕ ਕੋਨੇ ਦੇ ਕੋਆਰਡੀਨੇਟਸ ਨੂੰ ਅਪਡੇਟ ਕਰ ਸਕਦੇ ਹਾਂ। ਇਹ ਸਹੀ ਆਬਜੈਕਟ ਪਰਸਪਰ ਕ੍ਰਿਆਵਾਂ ਲਈ ਸਮਰੱਥ ਬਣਾਉਂਦਾ ਹੈ ਅਤੇ ਭਰੋਸਾ ਦਿਵਾਉਂਦਾ ਹੈ ਕਿ, ਰੋਟੇਸ਼ਨ ਦੀ ਡਿਗਰੀ ਦੀ ਪਰਵਾਹ ਕੀਤੇ ਬਿਨਾਂ, ਚੱਟਾਨ ਜਾਂ ਵਸਤੂ ਆਪਣੇ ਵਾਤਾਵਰਣ ਨਾਲ ਇਰਾਦੇ ਅਨੁਸਾਰ ਪਰਸਪਰ ਪ੍ਰਭਾਵ ਪਾਉਂਦੀ ਹੈ।
JavaScript ਕੈਨਵਸ ਵਿੱਚ ਚਿੱਤਰ ਘੁੰਮਾਉਣ ਬਾਰੇ ਆਮ ਸਵਾਲ
- ਤੁਸੀਂ ਰੋਟੇਸ਼ਨ ਤੋਂ ਪਹਿਲਾਂ ਇੱਕ ਚਿੱਤਰ ਨੂੰ ਕਿਵੇਂ ਕੇਂਦਰਿਤ ਕਰਦੇ ਹੋ?
- ਇੱਕ ਚਿੱਤਰ ਨੂੰ ਕੇਂਦਰਿਤ ਕਰਨ ਲਈ, ਦੀ ਵਰਤੋਂ ਕਰੋ ctx.translate() ਕੈਨਵਸ ਮੂਲ ਨੂੰ ਵਸਤੂ ਦੇ ਕੇਂਦਰ ਵਿੱਚ ਤਬਦੀਲ ਕਰਨ ਲਈ ਫੰਕਸ਼ਨ, ਅਤੇ ਫਿਰ ਵਰਤੋਂ ctx.rotate() ਨਵੇਂ ਮੂਲ ਦੇ ਦੁਆਲੇ ਘੁੰਮਾਉਣ ਲਈ.
- ਮੈਂ ਰੋਟੇਸ਼ਨ ਤੋਂ ਬਾਅਦ ਚਿੱਤਰ ਨੂੰ ਆਫਸੈੱਟ ਹੋਣ ਤੋਂ ਕਿਵੇਂ ਰੋਕ ਸਕਦਾ ਹਾਂ?
- ਆਫਸੈੱਟ ਤੋਂ ਬਚਣ ਲਈ, ਘੁੰਮਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਚਿੱਤਰ ਕੇਂਦਰ ਵਿੱਚ ਅਨੁਵਾਦ ਕਰੋ, ਅਤੇ ਨੈਗੇਟਿਵ x ਅਤੇ y ਮੁੱਲਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ ctx.drawImage().
- ਮੈਂ ਟੱਕਰ ਖੋਜ ਨਾਲ ਰੋਟੇਸ਼ਨ ਨੂੰ ਕਿਵੇਂ ਸਿੰਕ੍ਰੋਨਾਈਜ਼ ਕਰਾਂ?
- ਸਿੰਕ੍ਰੋਨਾਈਜ਼ ਕਰਨ ਲਈ, ਕੋਲਾਈਡਰ ਜਾਂ ਹਿੱਟਬਾਕਸ ਨੂੰ ਰੋਟੇਸ਼ਨ ਮੈਟ੍ਰਿਕਸ ਨਾਲ ਅਪਡੇਟ ਕਰੋ ਜਾਂ ਇਸਦੇ ਬਿੰਦੂਆਂ ਨੂੰ ਤਿਕੋਣਮਿਤੀ ਫੰਕਸ਼ਨਾਂ ਨਾਲ ਹੱਥੀਂ ਘੁੰਮਾਓ ਜਿਵੇਂ ਕਿ Math.cos() ਅਤੇ Math.sin().
- JavaScript ਕੈਨਵਸ ਵਿੱਚ ਵਸਤੂਆਂ ਨੂੰ ਘੁੰਮਾਉਣ ਦਾ ਸਭ ਤੋਂ ਵਧੀਆ ਤਰੀਕਾ ਕੀ ਹੈ?
- ਕੈਨਵਸ ਸੋਧਾਂ ਨੂੰ ਅਲੱਗ ਕਰਨ ਲਈ, ਵਰਤੋਂ ctx.save() ਅਤੇ ctx.restore(). ਫਿਰ, ਅਰਜ਼ੀ ਦੇਣ ਤੋਂ ਪਹਿਲਾਂ ਕੇਂਦਰ ਵਿੱਚ ਅਨੁਵਾਦ ਕਰੋ ctx.rotate().
- ਮੈਂ ਕੈਨਵਸ ਵਿੱਚ ਚਿੱਤਰਾਂ ਨੂੰ ਬੇਤਰਤੀਬ ਢੰਗ ਨਾਲ ਕਿਵੇਂ ਘੁੰਮਾਵਾਂ?
- ਬੇਤਰਤੀਬ ਰੋਟੇਸ਼ਨ ਮੁੱਲ ਪੈਦਾ ਕਰਨ ਲਈ, ਵਰਤਦੇ ਹੋਏ ਇੱਕ ਬੇਤਰਤੀਬ ਕੋਣ (ਰੇਡੀਅਨ ਵਿੱਚ) ਸੈੱਟ ਕਰੋ Math.random()
ਕੈਨਵਸ ਵਿੱਚ ਚਿੱਤਰ ਰੋਟੇਸ਼ਨ ਨੂੰ ਠੀਕ ਕਰਨ ਬਾਰੇ ਅੰਤਿਮ ਵਿਚਾਰ
ਸਿੱਟਾ ਕੱਢਣ ਲਈ, ਕੈਨਵਸ 'ਤੇ ਚਿੱਤਰ ਰੋਟੇਸ਼ਨ ਨੂੰ ਨਿਯੰਤਰਿਤ ਕਰਨ ਲਈ ਅਨੁਵਾਦਾਂ ਅਤੇ ਰੋਟੇਸ਼ਨਾਂ ਵੱਲ ਧਿਆਨ ਨਾਲ ਧਿਆਨ ਦੇਣਾ ਸ਼ਾਮਲ ਹੈ। ਅਸੀਂ ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰਦੇ ਹਾਂ ਕਿ ਆਬਜੈਕਟ ਨੂੰ ਘੁੰਮਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਕੈਨਵਸ ਦੇ ਮੂਲ ਨੂੰ ਆਬਜੈਕਟ ਦੇ ਕੇਂਦਰ ਵਿੱਚ ਬਦਲ ਕੇ ਕੇਂਦਰਿਤ ਅਤੇ ਇਕਸਾਰ ਰਹੇ।
ਇਸ ਤੋਂ ਇਲਾਵਾ, ਚਿੱਤਰ ਦੇ ਰੋਟੇਸ਼ਨ ਨੂੰ ਇਸਦੇ ਕੋਲਾਈਡਰ ਨਾਲ ਸਿੰਕ ਕਰਨਾ ਸਹੀ ਟੱਕਰ ਖੋਜ ਨੂੰ ਬਣਾਈ ਰੱਖਣ ਲਈ ਮਹੱਤਵਪੂਰਨ ਹੈ। ਢੁਕਵੇਂ ਪਰਿਵਰਤਨ ਅਤੇ ਗਣਿਤਕ ਐਲਗੋਰਿਦਮ ਦੀ ਵਰਤੋਂ ਕਰਕੇ, ਤੁਸੀਂ ਇਹ ਯਕੀਨੀ ਬਣਾ ਸਕਦੇ ਹੋ ਕਿ ਤੁਹਾਡੇ ਕੈਨਵਸ ਪ੍ਰੋਜੈਕਟ ਸੁਚਾਰੂ ਢੰਗ ਨਾਲ ਅਤੇ ਗਲਤੀਆਂ ਦੇ ਬਿਨਾਂ ਸੰਚਾਰ ਕਰਦੇ ਹਨ।
JavaScript ਕੈਨਵਸ ਵਿੱਚ ਚਿੱਤਰ ਰੋਟੇਸ਼ਨ ਲਈ ਹਵਾਲੇ ਅਤੇ ਸਰੋਤ
- ਕੈਨਵਸ ਰੋਟੇਸ਼ਨ, ਪਰਿਵਰਤਨ, ਅਤੇ ਟੱਕਰ ਖੋਜ ਬਾਰੇ ਵੇਰਵੇ ਕੈਨਵਸ API 'ਤੇ ਇਸ ਮਦਦਗਾਰ ਗਾਈਡ ਤੋਂ ਦਿੱਤੇ ਗਏ ਸਨ: MDN ਵੈੱਬ ਡੌਕਸ: ਕੈਨਵਸ ਪਰਿਵਰਤਨ .
- ਗੇਮ ਡਿਵੈਲਪਮੈਂਟ ਵਿੱਚ ਰੋਟੇਸ਼ਨ ਦੇ ਪ੍ਰਬੰਧਨ ਵਿੱਚ ਹੋਰ ਜਾਣਕਾਰੀ ਇੱਥੇ ਪਾਈ ਗਈ ਸੀ: GameDev StackExchange: ਰੋਟੇਸ਼ਨ ਆਫਸੈੱਟ ਮੁੱਦਿਆਂ ਨੂੰ ਸੰਭਾਲਣਾ .
- ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਗਣਿਤ ਫੰਕਸ਼ਨਾਂ ਨੂੰ ਟੱਕਰ ਖੋਜ ਅਤੇ ਕੋਣ ਗਣਨਾਵਾਂ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ: W3Schools: JavaScript Math .