好吧,繼承人我的問題,這將需要一點解釋。檢查AS3中所有場景對象的字符命中測試
對於課堂上正在開發的AS3街機遊戲。這所大學有一個街機,機器上的操作系統由我們的老師開發,並提供一個軟件開發工具包。它沒什麼特別的,所以大部分都很簡單。我只想指出這一點,主要是因爲SDK沒有提供ENTER_FRAME事件和循環函數Im,而是使用一個名爲update()的覆蓋函數來執行每幀更新。
好吧,以避開我的問題。我有一個名爲GameState的文檔類,它在本質上處理遊戲。在這堂課中,我設置了世界和角色。現在它只有2座山,2座城堡,3座島嶼和角色。
private function initWorld():void
{
trace("World has initiated");
addChild(hazardArea)
positionElement(hazardArea, 0, 560);
addChild(mountainSideRight);
positionElement(mountainSideRight, 730, 200)
addChild(mountainSideLeft);
positionElement(mountainSideLeft, 0, 200);
addChild(castleOne);
positionElement(castleOne, 5, 160);
addChild(castleTwo);
positionElement(castleTwo, 765, 160);
addIslands();
}
position元素只是一個函數,用於設置MC i添加到舞臺的x和y座標。現在,香港專業教育學院還設立了一個覆蓋上的AddChild,這樣每次我加一個孩子它保存成一個陣列以後可以訪問舞臺:
override public function addChild(object:*):void
{
super.addChild(object);
worldObjects.push(object);
}
確定和三個島嶼通過addIsland看起來像這樣說:
private function addIslands():void
{
var island:Array = Islands.getIslandCords();
for (var x:int = 0; x < DiceNumbers.NUM_ISLS; x++)
{
addChild(island[x].mc);
positionElement(island[x].mc, island[x].x, island[x].y);
}
}
羣島僅僅是找到一個位置我的3個島嶼一堆數學和東西的一類...其實並不重要返回的數組包含的一個實例僅有3對象moveclip和它的x和y座標。
我也有一個單獨的角色類,代表我的矮人(我的遊戲中的角色)。那裏有什麼怪異的類不同的是,我有一個重力系統,看起來像這樣:
var gravity:Number = 2;
public var moveX:Number = 300;
public var moveY:Number = 50;
public var xSpeed:Number = 0;
public var ySpeed:Number = 2;
public static const playerSpeed:Number = 3;
public var friction:Number = .75;
,然後update()函數,我提到的一樣EVENT_FRAME循環的作品,有這個在它:
public function update():void
{
xSpeed *= friction;
moveX += xSpeed;
moveY += ySpeed
theDwarf.y += gravity;
this.x = moveX;
this.y = moveY;
updateControls();
}
theDwarf是我的矮人電影剪輯的實例,updateControls爲我的矮人提供了移動功能。
好的....所以最後在update()函數下我的GameState類中,我調用了我的碰撞類,並將場景中的所有對象都傳遞給它。在這一類我檢查了衝突
public function checkCollision(listOfObjects:Vector.<MovieClip>):void
{
for (var i:int = 0; i < worldObjects.length; i++) {
if(worldObjects[i] is Player){
var objOne:MovieClip = worldObjects[i];
for (var j:int = 0; j < worldObjects.length; j++){
if (j == i){
// elimates self comparisons.
}
else{
var objTwo:MovieClip = worldObjects[j];
checkIntersect(objOne, objTwo)
}
}
}
}
}
private function checkIntersect(player:MovieClip, objTwo:MovieClip):void
{
if(player.hitTestObject(objTwo)){
player.ySpeed = -1;
}
else{
player.ySpeed = 2;
}
}
,我的問題是這樣的:這funcion檢查我的球員對舞臺上的每一個對象。所以儘管我的矮人在一個島上登陸,但他並沒有擊中其他兩個島,所以ySpeed一直保持重置爲2.如果我擺脫了其他聲明,我的矮人重力永遠不會回到2,他再也不會跌倒。我找不到解決方案......我很努力想找到解決這個問題的辦法,我很困難......我希望我的矮人掉下來,除非他在我的一個島嶼或一座山上。我希望我已經足夠清楚地解釋我的問題,現在已經變成一個巨大的帖子......:D謝謝!
如果你碰到物體,你必須打破循環,所以它不會做進一步的檢查,並可能重置球員的速度。 – Urosan 2013-02-21 10:33:30