首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重力/速度和跳跃问题(AS3,平台)

重力/速度和跳跃问题(AS3,平台)
EN

Stack Overflow用户
提问于 2015-04-21 15:27:34
回答 1查看 297关注 0票数 1

我目前正试图为Android开发一个闪存游戏。

我有或多或少的工作重力、速度和命中测试,所以我不会从我的平台上掉下来。

现在的问题是,一旦我点击“跳转”,命中测试就会停止工作,我就会从平台上掉下来。如果我把我的性格设置成一个不同的,更高的位置,我甚至不会跌倒。

有人能帮我弄清楚吗?

这是我的代码:

代码语言:javascript
复制
import flash.events.MouseEvent;
import flash.events.Event;


var gravity:Number = 2;
var velocity:Number = 1.1;
var jumpPower:Number = 0;
var isJumping:Boolean = false;


stage.addEventListener(Event.ENTER_FRAME, touchPlatform);
player.addEventListener(Event.ENTER_FRAME, appeal);

function touchPlatform(e:Event):void
    {
        if(kurz.hitTestObject(player))
            {
                hitPlatform = true;
                }

        else if(kurz2.hitTestObject(player))
            {
                hitPlatform = true;
                }

        }

function appeal(e:Event):void                               
    {
        gravity *= velocity;    
        player.y += gravity;                                

        if(hitPlatform == true)
        {
            velocity = 0;
            }

    }


jump.addEventListener(MouseEvent.CLICK, doJump);
stage.addEventListener(Event.ENTER_FRAME, update);
function doJump(e:MouseEvent):void
{
    if(!isJumping)
    {
        jumpPower = 30;
        isJumping = true;
        }
    }

function update(e:Event):void
    {
        if(isJumping)
        {
            player.y -= jumpPower;
            jumpPower -= 2;

            }

        else
        {
            isJumping = false;
            }
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-21 16:09:02

你的问题是,一旦你开始跳跃,你就永远不会停止!没有(可以到达的)您将isJumping设置为false。此外,你的跳跃值和你的重力目前是串联运行,你只想要一个或另一个影响你的球员在任何特定的时间。

尝试这样的方法(请参阅代码注释中的解释)

代码语言:javascript
复制
import flash.events.MouseEvent;
import flash.events.Event;


var gravity:Number = 2;
var velocity:Number = 1.1;
var jumpPower:Number = 0;
var isJumping:Boolean = false;

jump.addEventListener(MouseEvent.CLICK, doJump);
function doJump(e:MouseEvent):void {
    if(!isJumping){
        jumpPower = 30;
        isJumping = true;
    }
}


//Just one ENTER_FRAME handler is better, 
//then you have more control over the order in which code gets run
//I've combined your three into one and called it gameLoop
stage.addEventListener(Event.ENTER_FRAME, gameLoop);

function gameLoop(e:Event):void {
    //this is the same, I just combined your 2 if's into one.
    if(kurz.hitTestObject(player) || kurz2.hitTestObject(player)){
        hitPlatform = true;
    }                             

    //you should set the velocity before assigning it to the player
    if(hitPlatform == true){
        velocity = 0;
        gravity = 2; //you probably want to reset gravity to default too
        isJumping = false; //SET isJumping to false now that you've hit a platform!  <-------------
    }else{
        velocity = 1.1; //you need to reset velocity when not on a platform
    }


    //Now that we've determined the velocity and if we're jumping, let's move the player the appropriate amount

    if(isJumping){
        //Since we're currently jumping, use the jumpPower instead of gravity
        player.y -= jumpPower;
        jumpPower -= 2;
    }else{
        if(!hitPlatform){
            //Since we're NOT JUMPING, and not on a platform, use gravity.
            gravity *= velocity;    
            player.y += gravity;  
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29776624

复制
相关文章

相似问题

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