我试图编写一些东西,其中有生物来回奔跑,在舞台上上下运动,而我是玩家,必须尝试去找他们,然后捡起它们。舞台上还有界限
我的代码现在看起来像这样:
//Conditions that check if player/monsters are hittesting the boxes (rocks
//and stuff), then if correct, bounce them away. Following code excludes
//the monsters for simplicity.
if((mcPlayer.x - aBounceBox[b].x) < 0 && mcPlayer.y <= (aBounceBox[b].y + aBounceBox[b].height/2) && mcPlayer.y >= (aBounceBox[b].y - aBounceBox[b].height/2))
{
mcPlayer.x = aBounceBox[b].x - aBounceBox[b].width/2 - mcPlayer.width/2;
}
//Duplicate above code for right side of box here
if((mcPlayer.y - (aBounceBox[b].y + aBounceBox[b].height/2)) < 0 && (mcPlayer.x + mcPlayer.width/2) > (aBounceBox[b].x - aBounceBox[b].width/2) && (mcPlayer.x - mcPlayer.width/2) < (aBounceBox[b].x + aBounceBox[b].width/2))
{
mcPlayer.y = aBounceBox[b].y + aBounceBox[b].height/2;
}
//Duplicate above code for Upper boundary of box here
以上并不能很好地工作,因为盒子左右两侧的反弹代码与我测试的盒子的上部和下部相冲突。任何想法如何顺利地做到这一点?
另外,我遇到的另一个问题是游戏中怪物的路径。我试图让他们做以下事情:
我正在缓慢地构建代码,但我想我只是问是否有人对如何做到这一点有任何想法。
答案 0 :(得分:0)
要回答第一个问题,您可以尝试实现一个新的类/对象,它指示两个显示对象之间的xy偏移量。为了更清楚地说明这个想法,你可以有一个类似的功能:
public function getOffset(source:DisplayObject, target:DisplayObject):Object {
var dx:Number = target.x - source.x;
var dy:Number = target.y - source.y;
return { x:dx, y:dy };
}
首先hitTestObject(displayObj)
DisplayObject
类的true
检查英雄角色是否与另一个对象发生碰撞。如果结果为var offset:Object = getOffset(my_hero.mc, some_obstacle.mc);
,则继续。
假设您将英雄角色作为源对象传递,将另一个障碍作为目标对象传递,
offset.x
获得结果偏移值后,比较offset.y
和absDx
的幅度(绝对值)。结果可归纳如下:
让Math.abs(offset.x)
为absDy
,Math.abs(offset.y)
为absDx < absDy
,
offset.y < 0
target
,source
高于offset.y > 0
target
,source
低于absDx > absDy
offset.x < 0
target
,source
位于offset.x > 0
target
,source
位于absDx == absDy
然后你可以根据不同的情况更新你的英雄角色的位置。
关于为你的生物实施一个非常简单的AI算法的第二个问题,你可以利用上面的策略为你的生物验证它们是否与任何其他东西碰撞。如果它们碰撞,给它们指定其他运动方向,或者更简单,只需翻转它们的速度符号(+/-),它们就会向相反的方向行进。
首先实现简单算法更容易。一旦它正常工作,您可以随后应用您喜欢的任何增强功能。例如,在到达路口或每3秒等时更改路线等。