我在做闪光灯游戏但是..。碰撞是我的大问题。我试过每个网站,但都没有用。
播放机的代码如下:
onClipEvent(enterFrame){
if(Key.isDown(Key.RIGHT)) {
this._x+=3
}
if(Key.isDown(Key.LEFT)) {
this._x-=3
}
if(Key.isDown(Key.UP)) {
this._y-=3
}
if(Key.isDown(Key.DOWN)) {
this._y+=3
}
}
Collision:
if(cityhallLeftWall.hitTest(Player._x+Player._width/2, Player._y, true)){
Player._x -=0
}
if(cityhallRightWall.hitTest(Player._x-Player._width/2, Player._y, true)){
Player._x +=0
}
if(cityhallTopWall.hitTest(Player._x, Player._y+Player._height/2, true)){
Player._y +=0
}
if(cityhallBottomWall.hitTest(Player._x, Player._y-Player._height/2, true)){
Player._y -=0
}玩家的电影名为" player“。这座大楼的电影名叫“市政厅”。所以,我想举个例子,当电影播放器碰到电影城大厅时,y和x的速度得到0或者类似的东西。这是不可能找到解决办法,所以我决定在这里寻求帮助。
谢谢:)
发布于 2017-04-09 07:37:26
问题在于播放器的坐标。它们不是全球性的。
在您的碰撞函数中尝试这样做:
// store player's new local position in an object
var playerGlobalPosition = {
x:Player._x,
y:Player._y
};
// translate local position to global
Player.localToGlobal(playerGlobalPosition);然后对这些全局坐标进行测试:
if(cityhallLeftWall.hitTest(playerGlobalPosition.x + (Player._width/2), playerGlobalPosition.y, true)){
Player._x -= 3; // as mentioned before, replace those 0 values with 3
}解释:
在hitTest方法中,x和y坐标在全局坐标空间中定义。因此,如果我们的坐标(Player._x和Player._y)是局部的,那么在应用该方法之前,我们应该将它们转换到全局空间。更多在这里和这里
发布于 2016-06-23 22:32:21
您应该让+=成为与玩家速度相等的击退力,也就是说,如果您的玩家以每帧5像素的速度撞上一堵墙,那么这面墙应该在相反的方向向玩家增加5像素的速度,这样您就可以得到零的净移动。
发布于 2016-07-11 01:53:28
我已经有一段时间没有在AS2上做过任何事情了,但我会尝试一下的。
首先,为玩家的速度设置一个变量。看起来可能是这样的:
var speedX:Number = 0;现在,在enterFrame函数中添加以下内容:
Player._x += speedX; //接下来,在每个hitTest方法中,如下所示:
if(cityhallLeftWall.hitTest(Player._x+Player._width/2, Player._y, true)){
speedX = 0;
}对于y方向,您也需要这样做。我相信你能从这里弄明白的。干杯!
https://stackoverflow.com/questions/38002937
复制相似问题