每次单击按钮时,阵列中随机生成的敌人位置和类型无法正确更新
Random enemy position and type spawn from an array not updating properly with each button click
我需要我的 spawnEnemyClick 按钮在 3 个随机位置中的 1 个位置生成一个新敌人(它确实如此)并且生成的敌人应该是数组中 5 种敌人类型中的 1 个随机敌人(它没有这样做) ).如果我关闭 swf 并重新打开它,数组中的敌人类型将会改变,但不会在 spawnEnemyClick 上改变。我试过以不同的方式将敌人变量移动到 spawnEnemyClick 函数中,这就是我修复随机位置生成的方法,但由于所有敌人变量,它不会起作用。另外,如果有更好的方法来获得不使用多个变量的随机敌人类型数组,我也会对此感兴趣。
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
public class Main_EnemySpawnTest_2 extends MovieClip
{
// variables
var enemyType:Array = [Enemy1, Enemy2, Enemy3, Enemy4, Enemy5];
var enemyTypeRandomNumber:int = Math.random() * (enemyType.length);
var enemy = new enemyType[enemyTypeRandomNumber];
var topPosition:uint = 100;
var centerPosition:uint = 300;
var bottomPosition:uint = 500;
var enemySpeed:int = 5;
public function Main_EnemySpawnTest_2 ():void
{
// listeners
addEventListener(Event.ENTER_FRAME, checkEveryFrame);
spawnEnemyButton.addEventListener(MouseEvent.CLICK, spawnEnemyClick);
spawnEnemyButton.addEventListener(MouseEvent.CLICK, spawnEnemyClick);
}
public function checkEveryFrame(event:Event):void
{
// enemy speed
enemy.x = enemy.x - enemySpeed;
}
function spawnEnemyClick (event:MouseEvent):void
{
var enemyPositionRandomNumber:int = Math.random() * 3;
var enemyPositionX:int = stage.width - (enemy.width * -0.5);
if (enemyPositionRandomNumber == 0)
{
enemy.x = enemyPositionX;
enemy.y = topPosition;
addChild (enemy);
}
else if (enemyPositionRandomNumber == 1)
{
enemy.x = enemyPositionX;
enemy.y = centerPosition;
addChild (enemy);
}
else if (enemyPositionRandomNumber == 2)
{
enemy.x = enemyPositionX;
enemy.y = bottomPosition;
addChild (enemy);
}
trace (enemyTypeRandomNumber);
}
}
}
随机数只在此处的构造函数中创建一次:
var enemyTypeRandomNumber:int = Math.random() * (enemyType.length);
你一次又一次地对付同一个敌人。
要解决此问题,请将随机创建的敌人移动到 spawnEnemyClick
函数中,因此 "throws the dice again and again" 就像您现在对位置所做的那样。
提示:在该函数中删除并重新添加侦听器是没有意义的。它总是会完成函数的执行。这不是中断或并行或任何其他让您认为需要在函数期间禁用侦听器的东西。
编辑:
您收到错误是因为未正确定义变量。
保持线条不变,并在 spawnEnemyClick
函数中将值重新分配给敌人。
enemy = new enemyType[Math.floor(Math.random() * enemyType.length)];
类似的东西。没有"var",因为你不想重新赋值。
我需要我的 spawnEnemyClick 按钮在 3 个随机位置中的 1 个位置生成一个新敌人(它确实如此)并且生成的敌人应该是数组中 5 种敌人类型中的 1 个随机敌人(它没有这样做) ).如果我关闭 swf 并重新打开它,数组中的敌人类型将会改变,但不会在 spawnEnemyClick 上改变。我试过以不同的方式将敌人变量移动到 spawnEnemyClick 函数中,这就是我修复随机位置生成的方法,但由于所有敌人变量,它不会起作用。另外,如果有更好的方法来获得不使用多个变量的随机敌人类型数组,我也会对此感兴趣。
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
public class Main_EnemySpawnTest_2 extends MovieClip
{
// variables
var enemyType:Array = [Enemy1, Enemy2, Enemy3, Enemy4, Enemy5];
var enemyTypeRandomNumber:int = Math.random() * (enemyType.length);
var enemy = new enemyType[enemyTypeRandomNumber];
var topPosition:uint = 100;
var centerPosition:uint = 300;
var bottomPosition:uint = 500;
var enemySpeed:int = 5;
public function Main_EnemySpawnTest_2 ():void
{
// listeners
addEventListener(Event.ENTER_FRAME, checkEveryFrame);
spawnEnemyButton.addEventListener(MouseEvent.CLICK, spawnEnemyClick);
spawnEnemyButton.addEventListener(MouseEvent.CLICK, spawnEnemyClick);
}
public function checkEveryFrame(event:Event):void
{
// enemy speed
enemy.x = enemy.x - enemySpeed;
}
function spawnEnemyClick (event:MouseEvent):void
{
var enemyPositionRandomNumber:int = Math.random() * 3;
var enemyPositionX:int = stage.width - (enemy.width * -0.5);
if (enemyPositionRandomNumber == 0)
{
enemy.x = enemyPositionX;
enemy.y = topPosition;
addChild (enemy);
}
else if (enemyPositionRandomNumber == 1)
{
enemy.x = enemyPositionX;
enemy.y = centerPosition;
addChild (enemy);
}
else if (enemyPositionRandomNumber == 2)
{
enemy.x = enemyPositionX;
enemy.y = bottomPosition;
addChild (enemy);
}
trace (enemyTypeRandomNumber);
}
}
}
随机数只在此处的构造函数中创建一次:
var enemyTypeRandomNumber:int = Math.random() * (enemyType.length);
你一次又一次地对付同一个敌人。
要解决此问题,请将随机创建的敌人移动到 spawnEnemyClick
函数中,因此 "throws the dice again and again" 就像您现在对位置所做的那样。
提示:在该函数中删除并重新添加侦听器是没有意义的。它总是会完成函数的执行。这不是中断或并行或任何其他让您认为需要在函数期间禁用侦听器的东西。
编辑:
您收到错误是因为未正确定义变量。
保持线条不变,并在 spawnEnemyClick
函数中将值重新分配给敌人。
enemy = new enemyType[Math.floor(Math.random() * enemyType.length)];
类似的东西。没有"var",因为你不想重新赋值。