Actionscript 3 ActionScript 3-阵列问题中对象的碰撞检测
我正在开发一款小型flash游戏,目前正在尝试为最多4名玩家实现多人游戏。虽然1名玩家的碰撞检测效果非常好,但当添加更多玩家时,只有最后一名玩家才能与其他对象碰撞 使用trace语句,我发现从主类调用有问题的玩家的x和y坐标会返回初始的x和y位置,而不是当前的坐标(Actionscript 3 ActionScript 3-阵列问题中对象的碰撞检测,actionscript-3,flash,collision-detection,Actionscript 3,Flash,Collision Detection,我正在开发一款小型flash游戏,目前正在尝试为最多4名玩家实现多人游戏。虽然1名玩家的碰撞检测效果非常好,但当添加更多玩家时,只有最后一名玩家才能与其他对象碰撞 使用trace语句,我发现从主类调用有问题的玩家的x和y坐标会返回初始的x和y位置,而不是当前的坐标(trace(players[0].x+“/”+players[0].y);),同时从player类内调用它们(trace(this.x+“/”)+this.y);)总是给出正确的值 最后一个玩家将始终返回两个类中的正确坐标。下面是主类
trace(players[0].x+“/”+players[0].y);
),同时从player类内调用它们(trace(this.x+“/”)+this.y);
)总是给出正确的值
最后一个玩家将始终返回两个类中的正确坐标。下面是主类的骨架
public class main extends MovieClip {
public var collisionObject: Array = new Array(14);
public var players: Array = new Array();
private var noOfPlayers = 2;
public function main() {
for (var i = 0; i < noOfPlayers; i++) {
setupPlayer(i);
stage.addChild(players[i]);
}
setupCollisionObject();
stage.addEventListener(Event.ENTER_FRAME, checkForCollision);
}
private function setupCollisionObject() {
/* Determines positions of and spawns objects */
}
private function setupPlayer(playerNo) {
switch (playerNo) {
case 3:
players[3] = new player(1000, 576, 180, 104, 100, 102);
case 2:
players[2] = new player(24, 576, 0, 73, 74, 76);
case 1:
players[1] = new player(1000, 384, 180, 38, 37, 39);
case 0:
players[0] = new player(24, 384, 0, 87, 65, 68);
}
}
public function checkForCollision(e: Event) {
trace("x: "+players[0].x+" y: "+players[0].y);
trace("x: "+players[1].x+" y: "+players[1].y);
for (var i in players) {
for (var j in collisionObject) {
if (players[i].hitTestObject(collisionObject[j])) {
//damage player
}
}
}
}
}
public类main扩展了MovieClip{
公共变量冲突对象:数组=新数组(14);
公共变量:数组=新数组();
私有变量noOfPlayers=2;
公共功能main(){
对于(var i=0;i
我不知道为什么会发生这种情况。您缺少了
中断
在setupPlayer()
中的开关情况下,这将导致在每次调用setupPlayers(i)
时,除最后一次重新初始化外,所有播放器都会重新初始化
我们需要比所提供的更多的代码。你是在更新每个玩家的坐标还是只更新一个玩家的坐标?这正是答案,谢谢。有趣的是,我故意排除了他们,因为我相信我只运行了一次setupPlayer()。
private function setupPlayer(playerNo) {
switch (playerNo) {
case 3:
players[3] = new player(1000, 576, 180, 104, 100, 102);
break;
case 2:
players[2] = new player(24, 576, 0, 73, 74, 76);
break;
case 1:
players[1] = new player(1000, 384, 180, 38, 37, 39);
break;
case 0:
players[0] = new player(24, 384, 0, 87, 65, 68);
break;
}
}