首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActionScript 2墙碰撞

ActionScript 2墙碰撞
EN

Stack Overflow用户
提问于 2016-06-23 22:29:35
回答 4查看 555关注 0票数 0

我在做闪光灯游戏但是..。碰撞是我的大问题。我试过每个网站,但都没有用。

播放机的代码如下:

代码语言:javascript
复制
    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或者类似的东西。这是不可能找到解决办法,所以我决定在这里寻求帮助。

谢谢:)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-04-09 07:37:26

问题在于播放器的坐标。它们不是全球性的。

在您的碰撞函数中尝试这样做:

代码语言:javascript
复制
// 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);

然后对这些全局坐标进行测试:

代码语言:javascript
复制
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)是局部的,那么在应用该方法之前,我们应该将它们转换到全局空间。更多在这里这里

票数 0
EN

Stack Overflow用户

发布于 2016-06-23 22:32:21

您应该让+=成为与玩家速度相等的击退力,也就是说,如果您的玩家以每帧5像素的速度撞上一堵墙,那么这面墙应该在相反的方向向玩家增加5像素的速度,这样您就可以得到零的净移动。

票数 0
EN

Stack Overflow用户

发布于 2016-07-11 01:53:28

我已经有一段时间没有在AS2上做过任何事情了,但我会尝试一下的。

首先,为玩家的速度设置一个变量。看起来可能是这样的:

代码语言:javascript
复制
var speedX:Number = 0;

现在,在enterFrame函数中添加以下内容:

代码语言:javascript
复制
Player._x += speedX; //

接下来,在每个hitTest方法中,如下所示:

代码语言:javascript
复制
if(cityhallLeftWall.hitTest(Player._x+Player._width/2, Player._y, true)){
    speedX = 0;
}

对于y方向,您也需要这样做。我相信你能从这里弄明白的。干杯!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38002937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档