2025-10-23 10:48:08 +04:00
|
|
|
// Learn TypeScript:
|
|
|
|
|
// - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/typescript.html
|
|
|
|
|
// - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/typescript.html
|
|
|
|
|
// Learn Attribute:
|
|
|
|
|
// - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/reference/attributes.html
|
|
|
|
|
// - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/reference/attributes.html
|
|
|
|
|
// Learn life-cycle callbacks:
|
|
|
|
|
// - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/life-cycle-callbacks.html
|
|
|
|
|
// - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/life-cycle-callbacks.html
|
|
|
|
|
|
2025-10-29 13:27:41 +04:00
|
|
|
import GameData from "./GameData";
|
2025-11-03 15:27:17 +04:00
|
|
|
import SoundManager from "./SoundsManager";
|
2025-10-29 13:27:41 +04:00
|
|
|
|
2025-10-23 10:48:08 +04:00
|
|
|
const {ccclass, property} = cc._decorator;
|
|
|
|
|
|
|
|
|
|
@ccclass
|
|
|
|
|
export default class NewClass extends cc.Component {
|
|
|
|
|
|
2025-10-24 16:12:44 +04:00
|
|
|
@property(cc.Prefab)
|
|
|
|
|
alienship1: cc.Prefab = null;
|
2025-10-23 10:48:08 +04:00
|
|
|
|
2025-10-24 16:12:44 +04:00
|
|
|
@property(cc.Prefab)
|
|
|
|
|
alienship2: cc.Prefab = null;
|
2025-10-23 10:48:08 +04:00
|
|
|
|
2025-10-24 16:12:44 +04:00
|
|
|
@property(cc.Prefab)
|
|
|
|
|
alienship3: cc.Prefab = null;
|
|
|
|
|
|
|
|
|
|
spawnShips() {
|
|
|
|
|
var ships = [this.alienship1, this.alienship2, this.alienship3];
|
2025-10-28 16:32:18 +04:00
|
|
|
var randomShip = Math.floor(Math.random() * ships.length);
|
|
|
|
|
var RTL = Math.random() < 0.5;
|
|
|
|
|
var shipPrefab = ships[randomShip];
|
|
|
|
|
|
|
|
|
|
const batchMoveAmountX = Math.random() * 200 + 200;
|
|
|
|
|
|
2025-11-06 10:59:34 +04:00
|
|
|
const shipY = this.node.getContentSize().height;
|
2025-10-28 16:32:18 +04:00
|
|
|
|
|
|
|
|
const screenHalfWidth = this.node.getContentSize().width / 2;
|
|
|
|
|
const shipMaxMove = batchMoveAmountX;
|
|
|
|
|
const margin = 0;
|
|
|
|
|
const shipXMin = -screenHalfWidth + shipMaxMove + margin;
|
|
|
|
|
const shipXMax = screenHalfWidth - shipMaxMove - margin;
|
|
|
|
|
const shipX = Math.random() * (shipXMax - shipXMin) + shipXMin;
|
|
|
|
|
|
2025-10-30 15:03:57 +04:00
|
|
|
const randomNumber = Math.ceil(Math.random() * 10);
|
|
|
|
|
const specialItem = randomNumber%2 === 0 ? null : randomNumber%3 === 0 ? 'health' : 'rocket';
|
|
|
|
|
const specialItemIndex = Math.floor(Math.random() * GameData.instance.enemySpawnInterval);
|
|
|
|
|
|
2025-10-29 13:27:41 +04:00
|
|
|
for (let i = 0; i < GameData.instance.enemySpawnInterval; i++) {
|
2025-10-28 16:32:18 +04:00
|
|
|
this.scheduleOnce(() => {
|
|
|
|
|
const ship = cc.instantiate(shipPrefab);
|
|
|
|
|
ship.setPosition(shipX, shipY);
|
|
|
|
|
this.node.addChild(ship);
|
|
|
|
|
|
|
|
|
|
const shipScript = ship.getComponent('EnemyShip');
|
|
|
|
|
shipScript.moveAmountX = batchMoveAmountX;
|
|
|
|
|
shipScript.RTL = RTL;
|
2025-10-30 15:03:57 +04:00
|
|
|
|
|
|
|
|
if(i === specialItemIndex && specialItem !== null) {
|
|
|
|
|
shipScript.specialItem = specialItem;
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-29 13:27:41 +04:00
|
|
|
}, i * GameData.instance.enemyMoveTime * 0.25);
|
2025-10-28 16:32:18 +04:00
|
|
|
}
|
2025-10-24 16:12:44 +04:00
|
|
|
}
|
2025-10-23 10:48:08 +04:00
|
|
|
|
|
|
|
|
onLoad () {
|
|
|
|
|
var manager = cc.director.getCollisionManager();
|
|
|
|
|
manager.enabled = true;
|
2025-11-03 15:27:17 +04:00
|
|
|
|
|
|
|
|
SoundManager.instance.playMusic('Dududum', true);
|
2025-10-23 10:48:08 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
start () {
|
2025-10-30 15:03:57 +04:00
|
|
|
this.schedule(this.spawnShips, GameData.instance.selectedLevel * 3, cc.macro.REPEAT_FOREVER, 1);
|
2025-10-23 10:48:08 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// update (dt) {}
|
2025-10-28 16:32:18 +04:00
|
|
|
}
|