动作脚本3.如何在游戏舞台上取得成功?

时间:2013-09-12 07:46:56

标签: actionscript-3 flash actionscript actionscript-2 stage

我正在制作简单的Flash游戏,我只是制作角色控件(向左,向右和向左移动)。当我加重力时,我的角色从舞台上掉下来。

我已经绘制了地板,导入到库中,但我不知道代码应该是什么样子。

我的地板被称为“地面”我添加了AS Linkage“Ground”。

现在我的代码如下: (注意:我的角色被命名为“英雄”)

public class Script extends MovieClip{              // start the script

private const gravity:int = 1;
private const max_speed:int = 8;

private const walkspeed:int = 4;
private const jumpspeed:int = 10;

private var forecast_x:int;
private var forecast_y:int;

private const start_x:int = 50;
private const start_y:int = 50;

private var left:Boolean;
private var up:Boolean;
private var right:Boolean;
private var space:Boolean;

private var level:Array = new Array();

private var Map_data:Data = new Data;               // create a version of the Data.as
private var Hero_col:collision_manager = new collision_manager;

private var Hero:hero = new hero;

    public function Script(){                       // the init (will only be runned once)
        //BuildMap();
        create_hero();
        addEventListener(Event.ENTER_FRAME, main);
        stage.addEventListener(KeyboardEvent.KEY_DOWN, key_down);
        stage.addEventListener(KeyboardEvent.KEY_UP, key_up);

        Hero_col.Setup(25,level,Hero);
    }

    private function main(event:Event){
        update_hero();
    }

    private function key_down(event:KeyboardEvent){
        if(event.keyCode == 37){
            left = true;
        }
        if(event.keyCode == 38){
            up = true;
        }
        if(event.keyCode == 39){
            right = true;
        }
    }

    private function key_up(event:KeyboardEvent){
        if(event.keyCode == 37){
            left = false;
        }
        if(event.keyCode == 38){
            up = false;
        }
        if(event.keyCode == 39){
            right = false;
        }
    }

        private function create_hero(){
            addChild(Hero);
            Hero.x = start_x;
            Hero.y = start_y;
            Hero.x_speed = 0;
            Hero.y_speed = 0;
        }
        private function setDirection(param) {
    if (param == 0) {
        Hero.scaleX = 1;
    } else {
        Hero.scaleX = -1;
    }
}
        private function update_hero(){
            Hero.y_speed += gravity;
            if(left){
                Hero.x_speed = -walkspeed;
                setDirection(1);
            }
            if(right){
                Hero.x_speed = walkspeed;
                setDirection(0);
            }
            if(up && Hero_col.can_jump){
                Hero.y_speed = -jumpspeed;
            }

            if(Hero.y_speed > max_speed){
                Hero.y_speed = max_speed;
            }

            forecast_y = Hero.y + Hero.y_speed;
            forecast_x = Hero.x + Hero.x_speed;

            Hero_col.solve_all(forecast_x, forecast_y);


            Hero.x_speed = 0;
        }

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你需要有几个布尔变量来检查英雄是否在场上,以及重力是否应用。因此,如果他到达地板或特定区域,您必须将重力设置为假,而不是像您在此处一样更新每一帧:Hero.y_speed += gravity;

如果你按空格键,你需要让角色跳跃,然后通过将布尔设置为真来应用重力,之后,当它击中地板时,你应该禁用重力,再次跳跃。

void update(float delta) {
    if (grounded) { 
        // ground based movement and actions

        // check to see if the spacebar was pressed to jump
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Space) {
            ya = -40;   // go up 40 pixels per second
            grounded = false;
        }
    } else {
        // air based movement and actions

        // apply gravity
        ya += GRAVITY * delta;    
    }

    // movement and collision work after you've figured out the x and y acceleration of the player
    y += ya * delta;
}