爲了讓事情變得快速,我有一個玩家和敵人在一起的瓷磚佈置。敵人隨機移動
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