首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >平台故障AS3

平台故障AS3
EN

Stack Overflow用户
提问于 2014-05-26 04:16:51
回答 1查看 125关注 0票数 0

我正在制作一个以口袋妖怪为主题的游戏,里面会有各种各样的迷你游戏。第一幕要求角色在两个平台上跳跃,一个在右边,另一个在左边,以到达一个Pokeball,这触发了一个迷你游戏。

角色正确跳转并降落在平台上,没有任何问题;但是,每当我尝试直接跳转到平台下面时,角色就会被卡住。他可以移动,但他的头被卡在底部(想象他沿着侧面滑动)。奇怪的是,一旦他的头不再在平台下面,他就会做一个跳跃动作。我还发现,按下跳转键会反复迫使角色进出平台。

附件是我到目前为止拥有的代码:

代码语言:javascript
运行
复制
    var gravity:Number = 10;  
    var jumpPower:Number = 0;  
    var isJumping:Boolean = false; 
    var checkCollision:Boolean = false;
    var checkJump:Boolean = false;
    var ground:Number = 393 - trainer.height;
    var isRight = false;
    var checkUnder:Boolean = false;
    var isLeft = false;

    stage.addEventListener(KeyboardEvent.KEY_UP,released);
    stage.addEventListener(KeyboardEvent.KEY_DOWN,pressed);
    stage.addEventListener(Event.ENTER_FRAME,loop);
    stage.addEventListener(KeyboardEvent.KEY_DOWN, doJump);  
    stage.addEventListener(Event.ENTER_FRAME, update);
    stage.addEventListener(Event.ENTER_FRAME, ballHit);

    //MOVING LEFT OR RIGHT CODE-----------------------------------------------------------
    function released(event:KeyboardEvent){
        if(event.keyCode == Keyboard.RIGHT){
            isRight = false;
            }
        if(event.keyCode == Keyboard.LEFT){
            isLeft = false;
            }
        }

    function pressed(event:KeyboardEvent){
        if(event.keyCode == Keyboard.RIGHT){
            isRight = true;
            }
        if(event.keyCode == Keyboard.LEFT){
            isLeft = true;
            }
        }

    function loop(e:Event){
        if(isRight){
            trainer.x += 10;
            }
        if(isLeft){
            trainer.x -= 10;
            }
        //trainer hits walls
        if(trainer.x >= 500){
            trainer.x = 500;
            }
        if(trainer.x <=0){
            trainer.x = 0;
            }
        if(trainer.y <= 0){
            trainer.y = 0;
            }
        }
    // END OF MOVING LEFT OR RIGHT CODE-----------------------------------------------------------

    //JUMP WITH GRAVITY CODE----------------------------------------------------------------------
    function doJump(event:KeyboardEvent):void  
    {  

       if(isJumping == false){
       if(event.keyCode == Keyboard.UP)  
        {  
            jumpPower = -35;
    isJumping = true;
}          
}  
    }  

    function update(evt:Event):void  
    {  
        if(isJumping == true)  
        {  
            trainer.y += jumpPower;  
            jumpPower += 5;  }
        if(trainer.y >= 300)
        {    
            isJumping = false; 
        }
        //character lands on platform
        else if(trainer.y + 65 >= platformOne.y && trainer.x >=  platformOne.x - 60 && trainer.hitTestObject(platformOne)){
            isJumping = false;
        }
        else if(trainer.y + 65 >= platformTwo.y && trainer.x <=  platformTwo.x + 250 && trainer.hitTestObject(platformTwo)){
            isJumping = false;
            }

        else{
            isJumping = true;
            }
        /*if(trainer.y > platformOne.y && trainer.x >  platformOne.x && trainer.hitTestObject(platformOne)){
            trace("test");
            }*/
    }  
    //END OF JUMP WITH GRAVITY CODE--------------------------------------------------------------

    //CHECK BALL HIT CODE------------------------------------------------------------------------
    function ballHit(checkCol:Event):void{
     if(trainer.hitTestObject(pokeballOne)){
         pokeballOne.visible = false;
         checkCollision = true;
         }
        if(checkCollision == true){
            pokeBallOpenOne.y = 33.3;
            pokeBallOpenOne.x = 30.9;
            btnChallenge1.y = 58.3;
            btnChallenge1.x = 8.9;
            }
    }
    //END OF CHECK BALL HIT CODE----------------------------------------------------------------

    //CLICKING THE CHALLENGE BUTTON-------------------------------------------------------------
    btnChallenge1.addEventListener(MouseEvent.CLICK,handleClick3);

    function handleClick3(pEvent:MouseEvent){
        stage.removeEventListener(Event.ENTER_FRAME, update);
        stage.removeEventListener(Event.ENTER_FRAME, ballHit);
        stage.removeEventListener(Event.ENTER_FRAME,loop);
        gotoAndPlay("shootingStart", "Scene 4" );
    }
    //END OF CLICK THE CHALLEGNE BUTTON---------------------------------------------------------

因此,我希望解决的问题是:

  1. 我该如何防止这个角色被困在平台上?
  2. 当角色不再在平台下时,我该如何防止他跳下动作?

任何帮助都是非常感谢的。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-05-29 23:33:21

您遇到的问题是,isJumpingjumpPower同时负责两件事:

isJumping控制玩家是否可以跳跃,以及是否应用了玩家的跳跃运动。jumpPower控制玩家的跳跃运动,使他们像重力一样坠落。

也许有一种聪明的方法可以让这一切发挥作用,但我个人认为拥有单独的gravityisJumpingjumpPower变量更容易。

看起来在顶部已经有了一个gravity变量,但是它似乎没有在其他地方使用,所以我建议:

  • 使用“速度”变量的球员,被添加到他们的位置每次更新。
  • gravity添加到播放器的y速度,如果isJumping为真,则每次更新。
  • 或者将isJumping签入update替换为if (jumpPower < 0),或者只是在按下键盘时立即向播放器的y速度添加跳转功率。
  • 检查玩家在平台碰撞中的y速度,如果他们向下移动,将isJumping设置为false,但如果他们向上移动,则设置jumpPower,并将y速度移动到0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23862610

复制
相关文章

相似问题

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