为了让事情变得快速,我有一个玩家和敌人在一起的瓷砖布置。敌人随机移动
public static var floor1:Array = new Array(7);
floor1[0] = [0,1,1,1,1,1,0];
floor1[1] = [1,1,1,1,1,1,1];
floor1[2] = [1,1,1,0,1,1,1];
floor1[3] = [1,1,0,0,0,1,1];
floor1[4] = [1,1,1,0,1,1,1];
floor1[5] = [1,1,1,1,1,1,1];
floor1[6] = [0,1,1,1,1,1,0];
public function Main()
{
var tilew:int = 60;
var tileh:int = 60;
for (var i:int=0; i<floor1.length; i++)
{
for (var u:int=0; u<floor1[i].length; u++)
{
var cell:MovieClip = new Tile();
cell.gotoAndStop(floor1[i][u]);
cell.x = ((u-i)*tileh);
cell.y = ((u+i)*tilew/2);
addChild(cell);
cell.addEventListener(MouseEvent.ROLL_OVER, mouseover);
cell.addEventListener(MouseEvent.ROLL_OUT, mouseout);
cell.addEventListener(MouseEvent.CLICK, mouseclick);
cell.addEventListener(Event.ENTER_FRAME, beginfloor1);
}
}
var player:Player = new Player();
addChild(player);
player.mouseEnabled = false;
player.x = 5 * (tileh);
player.y = 5 * (tilew/2);
var enemy:Enemy = new Enemy();
addChild(enemy);
enemy.mouseEnabled = false;
enemy.x = 9 * (tileh);
enemy.y = 9 * (tileh/2);
我的目标是让敌人在他的范围内随机移动瓷砖。我所做的是创建一个名为enemyVisionArea的方形图形,用于检查哪个瓷砖击中敌人,基本上是围绕瓷砖。
我有一个计时器功能,告诉敌人每5秒移动一次,如果玩家不在他附近,并且他在旁边有可用的方块。
function timerenemy (event:TimerEvent){
if (enemy.enemyVisionArea.hitTestObject(enemyMover) && !player.visionPoint.hitTestObject(enemyMover.tileMiddle))
{
enemy.x = (enemyMover.x)+55;
enemy.y = (enemyMover.y)+20;
trace("moved");
}
}
enemyMover是一个变量,我使它等于瓦片对象。
function beginfloor1(event:Event)
{
enemyMover = event.currentTarget as Tile;
}
它只是停留在原地。我只是想让敌人自己在敌方视野区域的任何一块瓦片上击中附近的一块瓦片。 beginfloor1函数似乎没有工作。有没有什么办法可以将enemyMover = event.currentTarget声明为Tile并让敌人移动到其enemyVisionArea进行测试的随机区块上?
如果这是令人困惑的,我可以发布完整的代码。
感谢您的回答。用数组替换enemyMover是有意义的,因为它不止一个tile。关于psuedo tileset数组变量,我想让它等于floor1变量数组吗? – Bindlestick 2013-05-08 21:44:58
'floor1'只是一组索引,而你需要一个相应的'Tile'对象来引用。但是,使用'floor1'和tileset会帮助你过滤不可行的瓷砖。 – Vesper 2013-05-09 06:55:18
我将如何使tileset等于一个Tile对象?我已经尝试在之前进行赋值,并且它说数组不能等于影片剪辑 – Bindlestick 2013-05-10 18:37:50