You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Web-Dev-For-Beginners/translations/pa/6-space-game/4-collision-detection/README.md

217 lines
21 KiB

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "4b1d441cfd31924084956000c0fee5a5",
"translation_date": "2025-10-22T18:10:27+00:00",
"source_file": "6-space-game/4-collision-detection/README.md",
"language_code": "pa"
}
-->
# ਸਪੇਸ ਗੇਮ ਬਣਾਓ ਭਾਗ 4: ਲੇਜ਼ਰ ਸ਼ਾਮਲ ਕਰੋ ਅਤੇ ਟਕਰਾਅ ਦਾ ਪਤਾ ਲਗਾਓ
## ਪੂਰਵ-ਵਿਆਖਿਆ ਪ੍ਰਸ਼ਨੋਤਰੀ
[ਪੂਰਵ-ਵਿਆਖਿਆ ਪ੍ਰਸ਼ਨੋਤਰੀ](https://ff-quizzes.netlify.app/web/quiz/35)
ਸਟਾਰ ਵਾਰਜ਼ ਦੇ ਉਸ ਪਲ ਬਾਰੇ ਸੋਚੋ ਜਦੋਂ ਲੂਕ ਦੇ ਪ੍ਰੋਟੋਨ ਟੋਰਪੀਡੋਜ਼ ਡੈਥ ਸਟਾਰ ਦੇ ਐਗਜ਼ਹੌਸਟ ਪੋਰਟ ਨੂੰ ਹਿੱਟ ਕਰਦੇ ਹਨ। ਉਹ ਸਹੀ ਟਕਰਾਅ ਦਾ ਪਤਾ ਲਗਾਉਣਾ ਗਲੈਕਸੀ ਦੀ ਕਿਸਮਤ ਨੂੰ ਬਦਲ ਦਿੰਦਾ ਹੈ! ਗੇਮਾਂ ਵਿੱਚ, ਟਕਰਾਅ ਦਾ ਪਤਾ ਲਗਾਉਣਾ ਇਸੇ ਤਰੀਕੇ ਨਾਲ ਕੰਮ ਕਰਦਾ ਹੈ - ਇਹ ਇਹ ਨਿਰਧਾਰਤ ਕਰਦਾ ਹੈ ਕਿ ਜਦੋਂ ਵਸਤੂਆਂ ਅੰਤਰਕ੍ਰਿਆ ਕਰਦੀਆਂ ਹਨ ਅਤੇ ਅਗਲਾ ਕੀ ਹੁੰਦਾ ਹੈ।
ਇਸ ਪਾਠ ਵਿੱਚ, ਤੁਸੀਂ ਆਪਣੇ ਸਪੇਸ ਗੇਮ ਵਿੱਚ ਲੇਜ਼ਰ ਹਥਿਆਰ ਸ਼ਾਮਲ ਕਰੋਗੇ ਅਤੇ ਟਕਰਾਅ ਦਾ ਪਤਾ ਲਗਾਉਣਾ ਲਾਗੂ ਕਰੋਗੇ। NASA ਦੇ ਮਿਸ਼ਨ ਪਲਾਨਰਾਂ ਦੀ ਤਰ੍ਹਾਂ, ਜੋ ਮਲਬੇ ਤੋਂ ਬਚਣ ਲਈ ਅੰਤਰਿਕਸ਼ ਜਹਾਜ਼ ਦੇ ਰਸਤੇ ਦੀ ਗਣਨਾ ਕਰਦੇ ਹਨ, ਤੁਸੀਂ ਸਿੱਖੋਗੇ ਕਿ ਜਦੋਂ ਗੇਮ ਵਸਤੂਆਂ ਇੱਕ-ਦੂਜੇ ਨਾਲ ਟਕਰਾਉਂਦੀਆਂ ਹਨ। ਅਸੀਂ ਇਸ ਨੂੰ ਪ੍ਰਬੰਧਨਯੋਗ ਕਦਮਾਂ ਵਿੱਚ ਤੋੜਾਂਗੇ ਜੋ ਇੱਕ-ਦੂਜੇ 'ਤੇ ਬਣਦੇ ਹਨ।
ਅੰਤ ਵਿੱਚ, ਤੁਹਾਡੇ ਕੋਲ ਇੱਕ ਕੰਮ ਕਰਨ ਵਾਲਾ ਲੜਾਈ ਪ੍ਰਣਾਲੀ ਹੋਵੇਗੀ ਜਿੱਥੇ ਲੇਜ਼ਰ ਦੁਸ਼ਮਨਾਂ ਨੂੰ ਨਸ਼ਟ ਕਰਦੇ ਹਨ ਅਤੇ ਟਕਰਾਅ ਗੇਮ ਘਟਨਾਵਾਂ ਨੂੰ ਸ਼ੁਰੂ ਕਰਦੇ ਹਨ। ਇਹੀ ਟਕਰਾਅ ਦੇ ਸਿਧਾਂਤ ਭੌਤਿਕੀ ਸਿਮੂਲੇਸ਼ਨ ਤੋਂ ਇੰਟਰਐਕਟਿਵ ਵੈੱਬ ਇੰਟਰਫੇਸ ਤੱਕ ਹਰ ਚੀਜ਼ ਵਿੱਚ ਵਰਤੇ ਜਾਂਦੇ ਹਨ।
✅ ਸਭ ਤੋਂ ਪਹਿਲੀ ਕੰਪਿਊਟਰ ਗੇਮ ਬਾਰੇ ਕੁਝ ਖੋਜ ਕਰੋ ਜੋ ਕਦੇ ਲਿਖੀ ਗਈ ਸੀ। ਇਸ ਦੀ ਕਾਰਗੁਜ਼ਾਰੀ ਕੀ ਸੀ?
## ਟਕਰਾਅ ਦਾ ਪਤਾ ਲਗਾਉਣਾ
ਟਕਰਾਅ ਦਾ ਪਤਾ ਲਗਾਉਣਾ ਅਪੋਲੋ ਲੂਨਰ ਮੋਡਿਊਲ ਦੇ ਨਜ਼ਦੀਕੀ ਸੈਂਸਰਾਂ ਵਾਂਗ ਕੰਮ ਕਰਦਾ ਹੈ - ਇਹ ਲਗਾਤਾਰ ਦੂਰੀਆਂ ਦੀ ਜਾਂਚ ਕਰਦਾ ਹੈ ਅਤੇ ਜਦੋਂ ਵਸਤੂਆਂ ਬਹੁਤ ਨੇੜੇ ਆ ਜਾਂਦੀਆਂ ਹਨ ਤਾਂ ਚੇਤਾਵਨੀ ਦਿੰਦਾ ਹੈ। ਗੇਮਾਂ ਵਿੱਚ, ਇਹ ਪ੍ਰਣਾਲੀ ਇਹ ਨਿਰਧਾਰਤ ਕਰਦੀ ਹੈ ਕਿ ਜਦੋਂ ਵਸਤੂਆਂ ਅੰਤਰਕ੍ਰਿਆ ਕਰਦੀਆਂ ਹਨ ਅਤੇ ਅਗਲਾ ਕੀ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।
ਜੋ ਪਹੁੰਚ ਅਸੀਂ ਵਰਤਾਂਗੇ ਉਹ ਹਰ ਗੇਮ ਵਸਤੂ ਨੂੰ ਇੱਕ ਆਯਤਾਕਾਰ ਵਾਂਗ ਮੰਨਦੀ ਹੈ, ਜਿਵੇਂ ਕਿ ਹਵਾ ਟ੍ਰੈਫਿਕ ਕੰਟਰੋਲ ਪ੍ਰਣਾਲੀਆਂ ਜਹਾਜ਼ਾਂ ਨੂੰ ਟਰੈਕ ਕਰਨ ਲਈ ਸਰਲ ਜਿਓਮੈਟ੍ਰਿਕ ਆਕਾਰਾਂ ਦੀ ਵਰਤੋਂ ਕਰਦੀਆਂ ਹਨ। ਇਹ ਆਯਤਾਕਾਰ ਵਿਧੀ ਬੁਨਿਆਦੀ ਲੱਗ ਸਕਦੀ ਹੈ, ਪਰ ਇਹ ਗਣਨਾਤਮਕ ਤੌਰ 'ਤੇ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਹੈ ਅਤੇ ਜ਼ਿਆਦਾਤਰ ਗੇਮ ਸਥਿਤੀਆਂ ਲਈ ਚੰਗੀ ਤਰ੍ਹਾਂ ਕੰਮ ਕਰਦੀ ਹੈ।
### ਆਯਤਾਕਾਰ ਪ੍ਰਤੀਨਿਧਤਾ
ਹਰ ਗੇਮ ਵਸਤੂ ਨੂੰ ਕੋਆਰਡੀਨੇਟ ਬਾਊਂਡਰੀਜ਼ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ, ਜਿਵੇਂ ਕਿ ਮਾਰਸ ਪਾਥਫਾਈਂਡਰ ਰੋਵਰ ਨੇ ਮੰਗਲ ਗ੍ਰਹਿ ਦੀ ਸਤਹ 'ਤੇ ਆਪਣਾ ਸਥਾਨ ਨਕਸ਼ੇ ਵਿੱਚ ਦਰਸਾਇਆ। ਇੱਥੇ ਹੈ ਕਿ ਅਸੀਂ ਇਹ ਬਾਊਂਡਰੀ ਕੋਆਰਡੀਨੇਟਸ ਕਿਵੇਂ ਪਰਿਭਾਸ਼ਿਤ ਕਰਦੇ ਹਾਂ:
```javascript
rectFromGameObject() {
return {
top: this.y,
left: this.x,
bottom: this.y + this.height,
right: this.x + this.width
}
}
```
**ਇਸ ਨੂੰ ਤੋੜ ਕੇ ਵੇਖਦੇ ਹਾਂ:**
- **ਉੱਪਰੀ ਕਿਨਾਰਾ**: ਇਹ ਸਿਰਫ ਜਿੱਥੇ ਤੁਹਾਡੀ ਵਸਤੂ ਲੰਬਵਾਰ ਸ਼ੁਰੂ ਹੁੰਦੀ ਹੈ (ਇਸ ਦਾ y ਸਥਾਨ)
- **ਖੱਬਾ ਕਿਨਾਰਾ**: ਜਿੱਥੇ ਇਹ ਆੜ੍ਹਤ ਵਿੱਚ ਸ਼ੁਰੂ ਹੁੰਦੀ ਹੈ (ਇਸ ਦਾ x ਸਥਾਨ)
- **ਹੇਠਲਾ ਕਿਨਾਰਾ**: y ਸਥਾਨ ਵਿੱਚ ਉਚਾਈ ਸ਼ਾਮਲ ਕਰੋ - ਹੁਣ ਤੁਹਾਨੂੰ ਪਤਾ ਹੈ ਕਿ ਇਹ ਕਿੱਥੇ ਖਤਮ ਹੁੰਦੀ ਹੈ!
- **ਸੱਜਾ ਕਿਨਾਰਾ**: ਚੌੜਾਈ ਨੂੰ x ਸਥਾਨ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ - ਅਤੇ ਤੁਹਾਡੇ ਕੋਲ ਪੂਰੀ ਬਾਊਂਡਰੀ ਹੈ
### ਇੰਟਰਸੈਕਸ਼ਨ ਐਲਗੋਰਿਥਮ
ਆਯਤਾਕਾਰ ਇੰਟਰਸੈਕਸ਼ਨ ਦਾ ਪਤਾ ਲਗਾਉਣਾ ਉਸ ਤਰ੍ਹਾਂ ਦੇ ਤਰਕ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ ਜਿਵੇਂ ਕਿ ਹਬਲ ਸਪੇਸ ਟੈਲੀਸਕੋਪ ਇਹ ਨਿਰਧਾਰਤ ਕਰਦਾ ਹੈ ਕਿ ਕੀ ਇਸਦੇ ਖੇਤਰ ਵਿੱਚ ਆਕਾਸ਼ੀ ਵਸਤੂਆਂ ਇੱਕ-ਦੂਜੇ ਨਾਲ ਓਵਰਲੈਪ ਕਰ ਰਹੀਆਂ ਹਨ। ਐਲਗੋਰਿਥਮ ਵੱਖਰੇ ਹੋਣ ਦੀ ਜਾਂਚ ਕਰਦਾ ਹੈ:
```javascript
function intersectRect(r1, r2) {
return !(r2.left > r1.right ||
r2.right < r1.left ||
r2.top > r1.bottom ||
r2.bottom < r1.top);
}
```
**ਵੱਖਰੇ ਹੋਣ ਦੀ ਜਾਂਚ ਰਡਾਰ ਪ੍ਰਣਾਲੀਆਂ ਵਾਂਗ ਕੰਮ ਕਰਦੀ ਹੈ:**
- ਕੀ ਆਯਤਾਕਾਰ 2 ਪੂਰੀ ਤਰ੍ਹਾਂ ਆਯਤਾਕਾਰ 1 ਦੇ ਸੱਜੇ ਪਾਸੇ ਹੈ?
- ਕੀ ਆਯਤਾਕਾਰ 2 ਪੂਰੀ ਤਰ੍ਹਾਂ ਆਯਤਾਕਾਰ 1 ਦੇ ਖੱਬੇ ਪਾਸੇ ਹੈ?
- ਕੀ ਆਯਤਾਕਾਰ 2 ਪੂਰੀ ਤਰ੍ਹਾਂ ਆਯਤਾਕਾਰ 1 ਦੇ ਹੇਠਾਂ ਹੈ?
- ਕੀ ਆਯਤਾਕਾਰ 2 ਪੂਰੀ ਤਰ੍ਹਾਂ ਆਯਤਾਕਾਰ 1 ਦੇ ਉੱਪਰ ਹੈ?
ਜੇ ਇਹਨਾਂ ਵਿੱਚੋਂ ਕੋਈ ਵੀ ਸ਼ਰਤ ਸੱਚ ਨਹੀਂ ਹੈ, ਤਾਂ ਆਯਤਾਕਾਰਾਂ ਨੂੰ ਜ਼ਰੂਰ ਓਵਰਲੈਪ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ। ਇਹ ਪਹੁੰਚ ਉਸ ਤਰ੍ਹਾਂ ਹੈ ਜਿਵੇਂ ਕਿ ਰਡਾਰ ਓਪਰੇਟਰ ਇਹ ਨਿਰਧਾਰਤ ਕਰਦੇ ਹਨ ਕਿ ਕੀ ਦੋ ਜਹਾਜ਼ ਸੁਰੱਖਿਅਤ ਦੂਰੀ 'ਤੇ ਹਨ।
## ਵਸਤੂਆਂ ਦੇ ਜੀਵਨ ਚੱਕਰ ਦਾ ਪ੍ਰਬੰਧਨ
ਜਦੋਂ ਲੇਜ਼ਰ ਦੁਸ਼ਮਨ ਨੂੰ ਹਿੱਟ ਕਰਦਾ ਹੈ, ਦੋਵਾਂ ਵਸਤੂਆਂ ਨੂੰ ਗੇਮ ਤੋਂ ਹਟਾਉਣ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਹਾਲਾਂਕਿ, ਮਿਡ-ਲੂਪ ਵਿੱਚ ਵਸਤੂਆਂ ਨੂੰ ਮਿਟਾਉਣਾ ਕਰੈਸ਼ ਦਾ ਕਾਰਨ ਬਣ ਸਕਦਾ ਹੈ - ਅਪੋਲੋ ਗਾਈਡੈਂਸ ਕੰਪਿਊਟਰ ਵਰਗੇ ਪੁਰਾਣੇ ਕੰਪਿਊਟਰ ਸਿਸਟਮਾਂ ਵਿੱਚ ਸਿੱਖਿਆ ਗਿਆ ਸਬਕ। ਇਸ ਦੀ ਬਜਾਏ, ਅਸੀਂ "ਮਿਟਾਉਣ ਲਈ ਚਿੰਨ੍ਹ" ਪਹੁੰਚ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਾਂ ਜੋ ਫਰੇਮਾਂ ਦੇ ਵਿਚਕਾਰ ਵਸਤੂਆਂ ਨੂੰ ਸੁਰੱਖਿਅਤ ਤੌਰ 'ਤੇ ਹਟਾਉਂਦੀ ਹੈ।
ਇਹ ਹੈ ਕਿ ਅਸੀਂ ਕੁਝ ਮਿਟਾਉਣ ਲਈ ਕਿਵੇਂ ਚਿੰਨ੍ਹਿਤ ਕਰਦੇ ਹਾਂ:
```javascript
// Mark object for removal
enemy.dead = true;
```
**ਇਹ ਪਹੁੰਚ ਕਿਉਂ ਕੰਮ ਕਰਦੀ ਹੈ:**
- ਅਸੀਂ ਵਸਤੂ ਨੂੰ "ਮਰਿਆ ਹੋਇਆ" ਵਜੋਂ ਚਿੰਨ੍ਹਿਤ ਕਰਦੇ ਹਾਂ ਪਰ ਇਸਨੂੰ ਤੁਰੰਤ ਮਿਟਾਉਂਦੇ ਨਹੀਂ
- ਇਹ ਮੌਜੂਦਾ ਗੇਮ ਫਰੇਮ ਨੂੰ ਸੁਰੱਖਿਅਤ ਤੌਰ 'ਤੇ ਖਤਮ ਕਰਨ ਦਿੰਦਾ ਹੈ
- ਕੁਝ ਮਿਟ ਚੁੱਕੇ ਚੀਜ਼ਾਂ ਨੂੰ ਵਰਤਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਤੋਂ ਕੋਈ ਕਰੈਸ਼ ਨਹੀਂ!
ਫਿਰ ਅਗਲੇ ਰੈਂਡਰ ਸਾਈਕਲ ਤੋਂ ਪਹਿਲਾਂ ਮਿਟਾਉਣ ਲਈ ਚਿੰਨ੍ਹਿਤ ਕੀਤੀਆਂ ਵਸਤੂਆਂ ਨੂੰ ਫਿਲਟਰ ਕਰੋ:
```javascript
gameObjects = gameObjects.filter(go => !go.dead);
```
**ਇਹ ਫਿਲਟਰੀਂਗ ਕੀ ਕਰਦੀ ਹੈ:**
- ਸਿਰਫ "ਜੀਵਤ" ਵਸਤੂਆਂ ਨਾਲ ਇੱਕ ਤਾਜ਼ਾ ਸੂਚੀ ਬਣਾਉਂਦੀ ਹੈ
- ਕੁਝ ਵੀ ਮਰਿਆ ਹੋਇਆ ਚੁੱਕ ਕੇ ਬਾਹਰ ਸੁੱਟ ਦਿੰਦੀ ਹੈ
- ਤੁਹਾਡੀ ਗੇਮ ਨੂੰ ਸੁਰੱਖਿਅਤ ਤੌਰ 'ਤੇ ਚਲਾਉਂਦੀ ਹੈ
- ਨਸ਼ਟ ਕੀਤੀਆਂ ਵਸਤੂਆਂ ਦੇ ਸੰਗ੍ਰਹਿ ਤੋਂ ਮੈਮੋਰੀ ਬਲੋਟ ਨੂੰ ਰੋਕਦੀ ਹੈ
## ਲੇਜ਼ਰ ਮਕੈਨਿਕਸ ਲਾਗੂ ਕਰਨਾ
ਗੇਮਾਂ ਵਿੱਚ ਲੇਜ਼ਰ ਪ੍ਰੋਜੈਕਟਾਈਲਜ਼ ਸਟਾਰ ਟ੍ਰੈਕ ਵਿੱਚ ਫੋਟੋਨ ਟੋਰਪੀਡੋਜ਼ ਦੇ ਸਮਾਨ ਸਿਧਾਂਤ 'ਤੇ ਕੰਮ ਕਰਦੇ ਹਨ - ਇਹ ਵੱਖਰੀਆਂ ਵਸਤੂਆਂ ਹਨ ਜੋ ਸਿੱਧੇ ਰਸਤੇ ਵਿੱਚ ਚਲਦੀਆਂ ਹਨ ਜਦੋਂ ਤੱਕ ਇਹ ਕੁਝ ਹਿੱਟ ਨਹੀਂ ਕਰਦੀਆਂ। ਹਰ ਸਪੇਸਬਾਰ ਦਬਾਉਣ ਨਾਲ ਇੱਕ ਨਵਾਂ ਲੇਜ਼ਰ ਵਸਤੂ ਬਣਦਾ ਹੈ ਜੋ ਸਕ੍ਰੀਨ 'ਤੇ ਚਲਦਾ ਹੈ।
ਇਸਨੂੰ ਕੰਮ ਕਰਨ ਲਈ, ਸਾਨੂੰ ਕੁਝ ਵੱਖਰੀਆਂ ਚੀਜ਼ਾਂ ਨੂੰ ਸਹਿ-ਸੰਯੋਜਿਤ ਕਰਨ ਦੀ ਲੋੜ ਹੈ:
**ਲਾਗੂ ਕਰਨ ਲਈ ਮੁੱਖ ਹਿੱਸੇ:**
- **ਬਣਾਉਣਾ** ਲੇਜ਼ਰ ਵਸਤੂਆਂ ਜੋ ਹੀਰੋ ਦੇ ਸਥਾਨ ਤੋਂ ਜਨਮ ਲੈਂਦੀਆਂ ਹਨ
- **ਹੈਂਡਲ** ਕੀਬੋਰਡ ਇਨਪੁਟ ਲੇਜ਼ਰ ਬਣਾਉਣ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨ ਲਈ
- **ਪ੍ਰਬੰਧਨ** ਲੇਜ਼ਰ ਦੀ ਚਾਲ ਅਤੇ ਜੀਵਨ ਚੱਕਰ
- **ਲਾਗੂ** ਲੇਜ਼ਰ ਪ੍ਰੋਜੈਕਟਾਈਲਜ਼ ਲਈ ਦ੍ਰਿਸ਼ਮਾਨ ਪ੍ਰਤੀਨਿਧਤਾ
## ਫਾਇਰਿੰਗ ਰੇਟ ਕੰਟਰੋਲ ਲਾਗੂ ਕਰਨਾ
ਅਨਲਿਮਿਟਡ ਫਾਇਰਿੰਗ ਰੇਟ ਗੇਮ ਇੰਜਨ ਨੂੰ ਥੱਕਾ ਦੇਵੇਗਾ ਅਤੇ ਗੇਮਪਲੇ ਨੂੰ ਬਹੁਤ ਆਸਾਨ ਬਣਾ ਦੇਵੇਗਾ। ਅਸਲ ਹਥਿਆਰ ਪ੍ਰਣਾਲੀਆਂ ਨੂੰ ਇਸੇ ਤਰ੍ਹਾਂ ਦੀਆਂ ਪਾਬੰਦੀਆਂ ਦਾ ਸਾਹਮਣਾ ਕਰਨਾ ਪੈਂਦਾ ਹੈ - ਇੱਥੇ ਤੱਕ ਕਿ USS Enterprise ਦੇ ਫੇਜ਼ਰਜ਼ ਨੂੰ ਸ਼ਾਟਾਂ ਦੇ ਵਿਚਕਾਰ ਰੀਚਾਰਜ ਕਰਨ ਲਈ ਸਮਾਂ ਲੱਗਦਾ ਸੀ।
ਅਸੀਂ ਇੱਕ ਕੂਲਡਾਊਨ ਪ੍ਰਣਾਲੀ ਲਾਗੂ ਕਰਾਂਗੇ ਜੋ ਰੈਪਿਡ-ਫਾਇਰ ਸਪੈਮਿੰਗ ਨੂੰ ਰੋਕਦੀ ਹੈ ਜਦੋਂ ਕਿ ਸੰਵੇਦਨਸ਼ੀਲ ਕੰਟਰੋਲਾਂ ਨੂੰ ਬਰਕਰਾਰ ਰੱਖਦੀ ਹੈ:
```javascript
class Cooldown {
constructor(time) {
this.cool = false;
setTimeout(() => {
this.cool = true;
}, time);
}
}
class Weapon {
constructor() {
this.cooldown = null;
}
fire() {
if (!this.cooldown || this.cooldown.cool) {
// Create laser projectile
this.cooldown = new Cooldown(500);
} else {
// Weapon is still cooling down
}
}
}
```
**ਕੂਲਡਾਊਨ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ:**
- ਜਦੋਂ ਬਣਾਇਆ ਜਾਂਦਾ ਹੈ, ਹਥਿਆਰ "ਗਰਮ" ਸ਼ੁਰੂ ਹੁੰਦਾ ਹੈ (ਅਜੇ ਤੱਕ ਫਾਇਰ ਨਹੀਂ ਕਰ ਸਕਦਾ)
- ਟਾਈਮਆਉਟ ਪੀਰੀਅਡ ਤੋਂ ਬਾਅਦ, ਇਹ "ਠੰਡਾ" ਬਣ ਜਾਂਦਾ ਹੈ (ਫਾਇਰ ਕਰਨ ਲਈ ਤਿਆਰ)
- ਫਾਇਰ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ, ਅਸੀਂ ਜਾਂਚਦੇ ਹਾਂ: "ਕੀ ਹਥਿਆਰ ਠੰਡਾ ਹੈ?"
- ਇਹ ਸਪੈਮ-ਕਲਿੱਕਿੰਗ ਨੂੰ ਰੋਕਦਾ ਹੈ ਜਦੋਂ ਕਿ ਕੰਟਰੋਲਾਂ ਨੂੰ ਸੰਵੇਦਨਸ਼ੀਲ ਰੱਖਦਾ ਹੈ
✅ ਸਪੇਸ ਗੇਮ ਸੀਰੀਜ਼ ਦੇ ਪਾਠ 1 ਨੂੰ ਵੇਖੋ ਤਾਂ ਕਿ ਤੁਹਾਨੂੰ ਕੂਲਡਾਊਨਜ਼ ਬਾਰੇ ਯਾਦ ਆਵੇ।
## ਟਕਰਾਅ ਪ੍ਰਣਾਲੀ ਬਣਾਉਣਾ
ਤੁਸੀਂ ਆਪਣੀ ਮੌਜੂਦਾ ਸਪੇਸ ਗੇਮ ਕੋਡ ਨੂੰ ਵਧਾਉਂਦੇ ਹੋਏ ਇੱਕ ਟਕਰਾਅ ਪਤਾ ਲਗਾਉਣ ਦੀ ਪ੍ਰਣਾਲੀ ਬਣਾਉਣ ਜਾ ਰਹੇ ਹੋ। ਜਿਵੇਂ ਕਿ ਇੰਟਰਨੈਸ਼ਨਲ ਸਪੇਸ ਸਟੇਸ਼ਨ ਦੀ ਆਟੋਮੈਟਿਕ ਟਕਰਾਅ ਤੋਂ ਬਚਾਅ ਪ੍ਰਣਾਲੀ, ਤੁਹਾਡੀ ਗੇਮ ਲਗਾਤਾਰ ਵਸਤੂਆਂ ਦੇ ਸਥਾਨਾਂ ਦੀ ਨਿਗਰਾਨੀ ਕਰੇਗੀ ਅਤੇ ਇੰਟਰਸੈਕਸ਼ਨਜ਼ ਦਾ ਜਵਾਬ ਦੇਵੇਗੀ।
ਤੁਹਾਡੇ ਪਿਛਲੇ ਪਾਠ ਦੇ ਕੋਡ ਤੋਂ ਸ਼ੁਰੂ ਕਰਦੇ ਹੋਏ, ਤੁਸੀਂ ਟਕਰਾਅ ਪਤਾ ਲਗਾਉਣ ਨੂੰ ਸ਼ਾਮਲ ਕਰਾਂਗੇ ਜਿਸ ਵਿੱਚ ਖਾਸ ਨਿਯਮ ਹੋਣਗੇ ਜੋ ਵਸਤੂਆਂ ਦੀ ਅੰਤਰਕ੍ਰਿਆ ਨੂੰ ਨਿਰਧਾਰਤ ਕਰਦੇ ਹਨ।
> 💡 **ਪ੍ਰੋ ਟਿਪ**: ਲੇਜ਼ਰ ਸਪ੍ਰਾਈਟ ਪਹਿਲਾਂ ਹੀ ਤੁਹਾਡੇ ਐਸੈਟਸ ਫੋਲਡਰ ਵਿੱਚ ਸ਼ਾਮਲ ਹੈ ਅਤੇ ਤੁਹਾਡੇ ਕੋਡ ਵਿੱਚ ਦਰਸਾਇਆ ਗਿਆ ਹੈ, ਲਾਗੂ ਕਰਨ ਲਈ ਤਿਆਰ।
### ਲਾਗੂ ਕਰਨ ਲਈ ਟਕਰਾਅ ਦੇ ਨਿਯਮ
**ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਗੇਮ ਮਕੈਨਿਕਸ:**
1. **ਲੇਜ਼ਰ ਦੁਸ਼ਮਨ ਨੂੰ ਹਿੱਟ ਕਰਦਾ ਹੈ**: ਜਦੋਂ ਲੇਜ਼ਰ ਪ੍ਰੋਜੈਕਟਾਈਲ ਦੁਆਰਾ ਹਿੱਟ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਤਾਂ ਦੁਸ਼ਮਨ ਵਸਤੂ ਨਸ਼ਟ ਹੋ ਜਾਂਦੀ ਹੈ
2. **ਲੇਜ਼ਰ ਸਕ੍ਰੀਨ ਬਾਊਂਡਰੀ ਨੂੰ ਹਿੱਟ ਕਰਦਾ ਹੈ**: ਜਦੋਂ ਲੇਜ਼ਰ ਸਕ੍ਰੀਨ ਦੇ ਉੱਪਰੀ ਕਿਨਾਰੇ 'ਤੇ ਪਹੁੰਚਦਾ ਹੈ ਤਾਂ ਇਸਨੂੰ ਹਟਾ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ
3. **ਦੁਸ਼ਮਨ ਅਤੇ ਹੀਰੋ ਟਕਰਾਅ**: ਜਦੋਂ ਇਹ ਇੱਕ-ਦੂਜੇ ਨਾਲ ਟਕਰਾਉਂਦੇ ਹਨ ਤਾਂ ਦੋਵਾਂ ਵਸਤੂਆਂ ਨਸ਼ਟ ਹੋ ਜਾਂਦੀਆਂ ਹਨ
4. **ਦੁਸ਼ਮਨ ਹੇਠਾਂ ਪਹੁੰਚਦਾ ਹੈ**: ਜਦੋਂ ਦੁਸ਼ਮਨ ਸਕ੍ਰੀਨ ਦੇ ਹੇਠਲੇ ਹਿੱਸੇ 'ਤੇ ਪਹੁੰਚਦੇ ਹਨ ਤਾਂ ਗੇਮ ਖਤਮ ਹੋ ਜਾਂਦੀ ਹੈ
## ਤੁਹਾਡੇ ਵਿਕਾਸ ਵਾਤਾਵਰਣ ਦੀ ਸੈਟਿੰਗ
ਚੰਗੀ ਖ਼ਬਰ - ਅਸੀਂ ਤੁਹਾਡੇ ਲਈ ਜ਼ਿਆਦਾਤਰ ਮੂਲ ਢਾਂਚਾ ਪਹਿਲਾਂ ਹੀ ਸੈਟ ਕਰ ਦਿੱਤਾ ਹੈ! ਤੁਹਾਡੇ ਸਾਰੇ ਗੇਮ ਐਸੈਟਸ ਅਤੇ ਬੁਨਿਆਦੀ ਢਾਂਚਾ `your-work` ਸਬਫੋਲਡਰ ਵਿੱਚ ਉਪਲਬਧ ਹਨ, ਜੋ ਕਿ ਤੁਹਾਡੇ ਲਈ ਸ਼ਾਨਦਾਰ ਟਕਰਾਅ ਫੀਚਰ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਤਿਆਰ ਹੈ।
### ਪ੍ਰੋਜੈਕਟ ਢਾਂਚਾ
```bash
-| assets
-| enemyShip.png
-| player.png
-| laserRed.png
-| index.html
-| app.js
-| package.json
```
**ਫਾਇਲ ਢਾਂਚਾ ਨੂੰ ਸਮਝਣਾ:**
- **ਸ਼ਾਮਲ ਕਰਦਾ ਹੈ** ਗੇਮ ਵਸਤੂਆਂ ਲਈ ਸਾਰੇ ਸਪ੍ਰਾਈਟ ਚਿੱਤਰ
- **ਸ਼ਾਮਲ ਕਰਦਾ ਹੈ** ਮੁੱਖ HTML ਦਸਤਾਵੇਜ਼ ਅਤੇ ਜਾਵਾਸਕ੍ਰਿਪਟ ਐਪਲੀਕੇਸ਼ਨ ਫਾਇਲ
- **ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ** ਸਥਾਨਕ ਵਿਕਾਸ ਸਰਵਰ ਲਈ ਪੈਕੇਜ ਸੰਰਚਨਾ
### ਵਿਕਾਸ ਸਰਵਰ ਸ਼ੁਰੂ ਕਰਨਾ
ਆਪਣੇ ਪ੍ਰੋਜੈਕਟ ਫੋਲਡਰ ਵਿੱਚ ਜਾਓ ਅਤੇ ਸਥਾਨਕ ਸਰਵਰ ਸ਼ੁਰੂ ਕਰੋ:
```bash
cd your-work
npm start
```
**ਇਹ ਕਮਾਂਡ ਸੀਕਵੈਂਸ:**
- **ਡਾਇਰੈਕਟਰੀ** ਨੂੰ ਤੁਹਾਡੇ ਕੰਮ ਕਰਨ ਵਾਲੇ ਪ੍ਰੋਜੈਕਟ ਫੋਲਡਰ ਵਿੱਚ ਬਦਲਦਾ ਹੈ
- **ਸਥਾਨਕ HTTP ਸਰਵਰ** ਨੂੰ `http://localhost:5000` 'ਤੇ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ
- **ਤੁਹਾਡੇ ਗੇਮ ਫਾਇਲਾਂ** ਨੂੰ ਟੈਸਟਿੰਗ ਅਤੇ ਵਿਕਾਸ ਲਈ ਸੇਵਾ ਦਿੰਦਾ ਹੈ
- **ਲਾਈਵ ਵਿਕਾਸ** ਨੂੰ ਸਵੈਚਾਲਿਤ ਰੀਲੋਡਿੰਗ ਨਾਲ ਯੋਗ ਬਣਾਉਂਦਾ ਹੈ
ਆਪਣੇ ਬ੍ਰਾਊਜ਼ਰ ਨੂੰ ਖੋਲ੍ਹੋ ਅਤੇ `http://localhost:5000` 'ਤੇ ਜਾਓ ਤਾਂ ਜੋ ਤੁਹਾਡੀ ਮੌਜੂਦਾ ਗੇਮ ਸਥਿਤੀ ਨੂੰ ਹੀਰੋ ਅਤੇ ਦੁਸ਼ਮਨਾਂ ਦੇ ਸਕ੍ਰੀਨ 'ਤੇ ਰੇਂਡਰ ਕੀਤਾ ਜਾ ਸਕੇ।
### ਕਦਮ-ਦਰ-ਕਦਮ ਲਾਗੂ ਕਰਨਾ
ਜਿਵੇਂ ਕਿ NASA ਨੇ ਵੋਇਜਰ ਅੰਤਰਿਕਸ਼ ਜਹਾਜ਼ ਨੂੰ ਪ੍ਰੋਗਰਾਮ ਕਰਨ ਲਈ ਵਿਧਾਨਤਮਕ ਪਹੁੰਚ ਦੀ ਵਰਤੋਂ ਕੀਤੀ, ਅਸੀਂ ਟਕਰਾਅ ਪਤਾ ਲਗਾਉਣ ਨੂੰ ਵਿਧਾਨਤਮਕ ਤਰੀਕੇ ਨਾਲ ਲਾਗੂ ਕਰਾਂਗੇ, ਹਰ ਹਿੱਸੇ ਨੂੰ ਕਦਮ-ਦਰ-ਕਦਮ ਬਣਾਉਂਦੇ ਹੋਏ।
#### 1. ਆਯਤਾਕਾਰ ਟਕਰਾਅ ਬਾਊਂਡਰੀ ਸ਼ਾਮਲ ਕਰੋ
ਸਭ ਤੋਂ ਪਹਿਲਾਂ, ਆਓ ਆਪਣੇ ਗੇਮ ਵਸਤੂਆਂ ਨੂੰ ਸਿਖਾਈਏ ਕਿ ਉਹ ਆਪਣੀਆਂ ਬਾਊਂਡਰੀਆਂ ਨੂੰ ਕਿਵੇਂ ਦਰਸਾਉਣ। ਆਪਣੇ `GameObject` ਕਲਾਸ ਵਿੱਚ ਇਹ ਵਿਧੀ ਸ਼ਾਮ
---
**ਅਸਵੀਕਰਤਾ**:
ਇਹ ਦਸਤਾਵੇਜ਼ AI ਅਨੁਵਾਦ ਸੇਵਾ [Co-op Translator](https://github.com/Azure/co-op-translator) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀ ਹੋਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸੁੱਤੀਆਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਇਸ ਦੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਮੂਲ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਅਧਿਕਾਰਤ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸ ਅਨੁਵਾਦ ਦੀ ਵਰਤੋਂ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਗਲਤਫਹਿਮੀ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆ ਲਈ ਅਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ।