为了快速做事,我有一个玩家和敌人所在的瓷砖排列。
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是一个变量,我使其等于tile对象。
function beginfloor1(event:Event)
{
enemyMover = event.currentTarget as Tile;
}
它只是停留在原地。我只想让敌人在敌人的视线区域被击中的任何一块牌上自行移动。 beginfloor1函数似乎不起作用。有没有什么方法可以将enemyMover = event.currentTarget声明为Tile并让敌人移动一个随机的tile,其敌人的视频区域被击中?
如果这令人困惑,我可以发布完整的代码。
答案 0 :(得分:1)
您正在分配49个按顺序调用的enterframe侦听器,它们将一个变量更改为它们所连接的单元格。当然,最后一个图块是总是分配的。
我希望您希望敌人检查是否有可用于移动的磁贴。你实际上是在检查一块enemyMover
的瓷砖 - 你如何确定那块瓷砖是什么?你必须检查敌人周围的所有可用瓦片,列出它们并从该列表中选择一个不是当前瓦片的瓦片,然后将敌人移到那里。
所以,首先你需要一个完整的tileset可以从某个地方寻址。最好的方法是声明一个全班var tileset:Array
并填写新牌。从那里的代码中删除Event.ENTER_FRAME
侦听器,因为它没用。然后,在你的timerevent
中,对于敌人你会检查所有tileset
是否在敌人的视野范围内(你使用hitTestObject
,我会使用清晰的距离网格或者是坐标 - 它的速度要快得多),如果是这样的话,你可以将它们添加到你在该函数中创建的TEMPORARY数组中。当然,如果你的敌人在当前处理的细胞中,你就会忽略它 - 你必须移动你的敌人,而不是让他站在原地。然后,选择(不知何故,由你决定)敌人应该移动到哪个单元格,并执行移动。是的,如果您希望敌人随机移动,请通过Math.floor(Math.random()*selectedcells.length)
的索引随机选择一个单元格。