我的 for 循环不会显示我的对象,但不会出现错误
My for loop won't display my object, but no errors show up
出于某种原因,我的 for 循环无法正常工作,当我使用 trace
时,敌人不会生成,输出中也不会出现任何内容。但是,也没有错误,所以我想知道是什么问题。
这是我的代码:
var playerX = 0;
var playerY = 0;
var mapWidth = 5000;
var mapHeight = 5000;
//enemy
var myEnemies:Array = new Array();
var enemySprite:Sprite;
var Enemy:enemy;
var enemyCount:int = 0;
//event listeners
stage.addEventListener(Event.ENTER_FRAME, spawnEnemies);
//spawn enemies
function spawnEnemies(spawn:Event) {
if (enemyCount < 20) {
for (var i = 0; i < myEnemies.length; i++) {
enemySprite = new Sprite();
this.addChild(enemySprite);
Enemy = new enemy();
Enemy.x = (Math.random() * this.width);
Enemy.y = (Math.random() * this.height);
enemySprite.addChild(Enemy);
enemyCount++;
myEnemies[enemyCount] = enemySprite;
trace(myEnemies.length);
}
stage.addEventListener(Event.ENTER_FRAME, moveEnemy);
}
}
//move the enemies
function moveEnemy(enemyMovement:Event){
for (var k = 0; k < myEnemies.length; k++) {
trace("move enemy");
if (myEnemies[k].y > playerY) {
myEnemies[k].y -= 1;
myEnemies[k].rotation = 0;
}
else if (myEnemies[k].x < playerX) {
myEnemies[k].x += 1;
myEnemies[k].rotation = 90;
}
else if (myEnemies[k].y < playerY) {
myEnemies[k].y += 1;
myEnemies[k].rotation = 180;
}
else {
myEnemies[k].x -= 1;
myEnemies[k].rotation = 270;
}
}
}
感谢您的帮助!
好的,我已经很长时间没有使用 AS3 了,但是...如果 myEnemies 长度为 0,你为什么期望创建新的敌人?
此外,您创建了两个不同的 ENTER_FRAME 函数,没有必要这样做。只创建一个函数并调用它进行示例更新:
private function update(e:event)
{
}
stage.addEventListener(Event.ENTER_FRAME, update);
您不应该在 ENTER_FRAME 函数中使用 for 循环创建新精灵,因为该函数每秒运行 30 次或更多次。
在 "init" 或 "create" 函数内创建 for 循环,除非您想更新每一帧的代码。
添加 10 个敌人:
for (var i = 0; i < 10; i++) {
Enemy = new enemy();
Enemy.x = (Math.random() * this.width);
Enemy.y = (Math.random() * this.height);
this.addChild(Enemy);
// add it to array
myEnemies.push(Enemy);
}
您不能使用 myEnemies 创建新的 Enemy 精灵,因为它是空的,所以您创建了 0 个敌人。如果您想创建 10 个敌人,请使用此代码,或者简单地将数字 10 更改为您想要的任何数字。
出于某种原因,我的 for 循环无法正常工作,当我使用 trace
时,敌人不会生成,输出中也不会出现任何内容。但是,也没有错误,所以我想知道是什么问题。
这是我的代码:
var playerX = 0;
var playerY = 0;
var mapWidth = 5000;
var mapHeight = 5000;
//enemy
var myEnemies:Array = new Array();
var enemySprite:Sprite;
var Enemy:enemy;
var enemyCount:int = 0;
//event listeners
stage.addEventListener(Event.ENTER_FRAME, spawnEnemies);
//spawn enemies
function spawnEnemies(spawn:Event) {
if (enemyCount < 20) {
for (var i = 0; i < myEnemies.length; i++) {
enemySprite = new Sprite();
this.addChild(enemySprite);
Enemy = new enemy();
Enemy.x = (Math.random() * this.width);
Enemy.y = (Math.random() * this.height);
enemySprite.addChild(Enemy);
enemyCount++;
myEnemies[enemyCount] = enemySprite;
trace(myEnemies.length);
}
stage.addEventListener(Event.ENTER_FRAME, moveEnemy);
}
}
//move the enemies
function moveEnemy(enemyMovement:Event){
for (var k = 0; k < myEnemies.length; k++) {
trace("move enemy");
if (myEnemies[k].y > playerY) {
myEnemies[k].y -= 1;
myEnemies[k].rotation = 0;
}
else if (myEnemies[k].x < playerX) {
myEnemies[k].x += 1;
myEnemies[k].rotation = 90;
}
else if (myEnemies[k].y < playerY) {
myEnemies[k].y += 1;
myEnemies[k].rotation = 180;
}
else {
myEnemies[k].x -= 1;
myEnemies[k].rotation = 270;
}
}
}
感谢您的帮助!
好的,我已经很长时间没有使用 AS3 了,但是...如果 myEnemies 长度为 0,你为什么期望创建新的敌人? 此外,您创建了两个不同的 ENTER_FRAME 函数,没有必要这样做。只创建一个函数并调用它进行示例更新:
private function update(e:event)
{
}
stage.addEventListener(Event.ENTER_FRAME, update);
您不应该在 ENTER_FRAME 函数中使用 for 循环创建新精灵,因为该函数每秒运行 30 次或更多次。 在 "init" 或 "create" 函数内创建 for 循环,除非您想更新每一帧的代码。
添加 10 个敌人:
for (var i = 0; i < 10; i++) {
Enemy = new enemy();
Enemy.x = (Math.random() * this.width);
Enemy.y = (Math.random() * this.height);
this.addChild(Enemy);
// add it to array
myEnemies.push(Enemy);
}
您不能使用 myEnemies 创建新的 Enemy 精灵,因为它是空的,所以您创建了 0 个敌人。如果您想创建 10 个敌人,请使用此代码,或者简单地将数字 10 更改为您想要的任何数字。