在坠落时停止平台上的角色:AS3

时间:2013-11-11 03:23:55

标签: actionscript-3

我正在制作平台游戏。目前我只是想创造引力和平台。我的重力下降,但当我的角色(玩家)与平台发生碰撞时,他立即回到屏幕顶部并再次跌落,并且每次玩家触摸平台时都会不断重复。这是我的代码:

package  {

import flash.display.MovieClip;
import flash.events.KeyboardEvent;
import flash.events.Event;
import flash.ui.Keyboard;


public class GameCode extends MovieClip {

    var upKey:Boolean;
    var leftKey:Boolean;
    var rightKey:Boolean;
    var jump:Boolean = false;

    var xvelocity:int = 10;
    var yvelocity:int = 0;
    var gravity:Number = 7;

    var startPosY:int;
    var startPosX:int;
    var lastPosY:int;
    var lastPosX:int;

    public function GameCode() {
        // constructor code
    }

    public function startGame(){
        stage.addEventListener(KeyboardEvent.KEY_UP, checkKeyUp);
        stage.addEventListener(KeyboardEvent.KEY_DOWN, checkKeyDown);
        stage.addEventListener(Event.ENTER_FRAME, update);
    }

    function update(evt:Event){
        moveCharacter();
        yvelocity += gravity;

        for (var i:int = 0; i < 10; i++){
            if (!platform.hitTestObject(player)){
                player.y = yvelocity;
            }
            if (platform.hitTestObject(player)){
                yvelocity = 0;
                player.y--;
            }
        }
    }

    function moveCharacter(){
        lastPosY = player.y;
        lastPosX = player.x;

        if (leftKey == true){
            player.x -= xvelocity;
        }
        if (rightKey == true){
            player.x += xvelocity;
        }
        if (upKey == true){
            if (jump == true){
                player.y
            }
        }
    }

    function checkKeyDown(evt:KeyboardEvent){
        if (evt.keyCode == Keyboard.LEFT){
            leftKey = true;
        }
        else if (evt.keyCode == Keyboard.RIGHT){
            rightKey = true;
        }
        else if (evt.keyCode == Keyboard.UP){
            upKey = true;
        }
    }

    function checkKeyUp(evt:KeyboardEvent){
        if (evt.keyCode == Keyboard.LEFT){
            leftKey = false;
        }
        else if (evt.keyCode == Keyboard.RIGHT){
            rightKey = false;
        }
        else if (evt.keyCode == Keyboard.UP){
            upKey = false;
        }
    }
}

}

我的角色的实例名称是播放器,我的平台实例只是平台。 显然,我想帮助解决这个问题;我想要的是角色随着重力坠落,落在平台上,能够四处移动,当坠落时角色掉到底部。

1 个答案:

答案 0 :(得分:0)

我相信问题在这里:

for (var i:int = 0; i < 10; i++){
    if (!platform.hitTestObject(player)){
        player.y = yvelocity;  // if yvelocity == 0, then so will the player's y
    }
    if (platform.hitTestObject(player)){
        yvelocity = 0;
        player.y--;
    }
}

你应该检查每个平台是否发生碰撞,如果有一个发生相应的句柄并且突破了循环。

你应该在循环之前通过yvelocity递增你的玩家。

player.y += yvelocity;

如果发生碰撞,您应该设置player.y,以便玩家的脚站在平台上。假设平台的起点位于平台的左上角,而玩家.y是玩家脚的水平,你可以这样做:

player.y = platform.y - 1;

我不会为你编写代码,但逻辑应该可以帮助你。

我还要注意,这个实现没有说明身体的哪个部分与平台发生碰撞。因此,如果玩家跳起并且他的头部与平台相撞,他就会弹出平台的顶部。

此外,如果玩家能够在跌倒时向左/向右移动并移动到身体两侧的一个区域,他会弹出到平台的顶部。

你应该google“as3平台游戏教程”或者那种性质的东西,因为其中一些概念可能会更详细地讨论,包括解决方案。