Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class 如何创建重力翻转机制(ActionScript 3)_Class_Actionscript 3_Oop_Gravity_Flip - Fatal编程技术网

Class 如何创建重力翻转机制(ActionScript 3)

Class 如何创建重力翻转机制(ActionScript 3),class,actionscript-3,oop,gravity,flip,Class,Actionscript 3,Oop,Gravity,Flip,嗨,我想做一个重力翻转的游戏,就像以前的迷你夹游戏《重力小子》一样,但我似乎无法让它工作。请帮忙 这是我脑子里的理论。我有一个movieclip,它总是在下降/这个.y+dy。但是一旦它与平台碰撞,dy将被设置为0,这样它就会停止下降。然后,当我按下空格键时,dy将再次设置为3,但它将乘以-1,因此它将开始向上飞行 这就是我目前所拥有的 package { import flash.display.*; import flash.events.*; import flash.ui.Keyboa

嗨,我想做一个重力翻转的游戏,就像以前的迷你夹游戏《重力小子》一样,但我似乎无法让它工作。请帮忙

这是我脑子里的理论。我有一个movieclip,它总是在下降/这个.y+dy。但是一旦它与平台碰撞,dy将被设置为0,这样它就会停止下降。然后,当我按下空格键时,dy将再次设置为3,但它将乘以-1,因此它将开始向上飞行

这就是我目前所拥有的

package  {
import flash.display.*;
import flash.events.*;
import flash.ui.Keyboard;

public class Player extends MovieClip{
    //Properties
    private var moveLeft:Boolean;
    private var moveRight:Boolean;
    private var gravity:Boolean; //Switches gravity
    private var dx:Number //Speed of player moving on X axis
    private var dy:Number //Speed of player moving on Y axis
    private var level:MovieClip;
    private var platforms:Array;
    private var tilesTop:Array;
    private var tilesBtm:Array;
    private var tilesLeft:Array;
    private var tilesRight:Array;
    private var grounded:Boolean;
    private var flipGravity:Number;

    //Constructor
    public function Player(iMain:Main) {
        level = iMain.getLevel();
        platforms = level.getPlatforms();
        tilesTop = level.getTilesTop();
        tilesBtm = level.getTilesBtm();
        tilesLeft = level.getTilesLeft();
        tilesRight = level.getTilesRight();

        dx = 10;
        dy = 10;
        flipGravity = -1;
        this.addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
    }

    //Methods
    // Method: Add to stage handler
    private function addedToStageHandler(evt:Event):void {
        this.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
        this.stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
    }

    //Methods: Key down handler
    private function keyDownHandler(evt:KeyboardEvent):void {
        if (evt.keyCode == Keyboard.LEFT) {
            moveLeft = true;
        }
        else if (evt.keyCode == Keyboard.RIGHT) {
            moveRight = true;
        }
        else if (evt.keyCode == Keyboard.SPACE) {
            if (gravity) {
                gravity = false;
            }
            else if (!gravity) {
                gravity = true;
            }
        }
    }

    //Methods: Key up handler
    private function keyUpHandler(evt:KeyboardEvent):void {
        if (evt.keyCode == Keyboard.LEFT) {
            moveLeft = false;
        }
        else if (evt.keyCode == Keyboard.RIGHT) {
            moveRight = false;
        }
    }

    //Methods: Move player
    public function movePlayer() {

        // Move downward
        this.y += dy;

        grounded = false;

        // *** Player's collision tests
        // Check if it lands on platform
        landOnPlatform();

        // Move left
        if (moveLeft) {  // equivalent to if (moveLeft == true)
            if (this.x > 200) { //move player
                this.x -= dx;
            }
            else {
                level.moveLevel(dx);
                if  ( level.x >= 0 ) {//stage stop moving so that the player won't fall of the screen(left)
                    level.x = 0;
                    this.x -= dx;
                    if  (this.x < this.width/2) {
                        this.x=this.width/2;
                    }
                }
            }
        }

        // Move right
        if (moveRight) {
            if (this.x < 600) { //move player
                this.x += dx;
            }
            else {
                level.moveLevel(-dx);
                if (level.x <= -1600) { //stage stop moving so that the player won't fall of the screen(right)
                    level.x = -1600;
                    this.x += dx;
                    if  (this.x > stage.stageWidth - this.width/2) {
                        this.x= stage.stageWidth - this.width/2;
                    }
                }
            }
        }

        //Gravity flip
        if (!gravity) {
            dy *= flipGravity;
            grounded = false;
        }
    }

    private function landOnPlatform() {
        for (var i:int=0;i<platforms.length;i++) {
            /*if (this.hitTestObject(platforms[i])) {
                dy = 0;
                grounded = true;
                this.y = platforms[i].y;
                break;
            }*/
            if (this.hitTestObject(tilesTop[i])) {
                dy = 0;
                grounded = true;
                this.y = tilesTop[i].y;
                break;
            }

            else if (this.hitTestObject(tilesBtm[i])) {
                dy = 0;
                grounded = true;
                this.y = tilesBtm[i].y;
                break;
            }

            else if (this.hitTestObject(tilesLeft[i])) {
                dy = 0;
                grounded = true;
                this.x = tilesLeft[i].x;
                break;
            }

            else if (this.hitTestObject(tilesRight[i])) {
                dy = 0;
                grounded = true;
                this.x = tilesRight[i].x;
                break;
            }
        }
    }
}
}
包{
导入flash.display.*;
导入flash.events.*;
导入flash.ui.Keyboard;
公共类播放器扩展MovieClip{
//性质
私有变量左:布尔值;
私有var-moveRight:布尔值;
私有变量gravity:Boolean;//切换gravity
私有变量dx:数字//玩家在X轴上移动的速度
私有变量dy:Number//玩家在Y轴上移动的速度
私有var级别:MovieClip;
私有var平台:数组;
私有变量tilesTop:数组;
私有变量tilesBtm:Array;
私有变量tilesleet:数组;
私有变量tileRight:数组;
私有变量:布尔值;
私有变量:数字;
//建造师
公共功能播放器(iMain:Main){
level=iMain.getLevel();
platforms=level.getPlatforms();
tilesTop=level.getTilesTop();
tilesBtm=level.getTilesBtm();
tilesleet=level.getTilesLeft();
TileRight=level.getTilesRight();
dx=10;
dy=10;
重力=-1;
this.addEventListener(Event.ADDED_TO_STAGE,addedStatageHandler);
}
//方法
//方法:添加到阶段处理程序
私有函数AddedStatageHandler(evt:Event):void{
this.stage.addEventListener(KeyboardEvent.KEY_DOWN,keydowHandler);
this.stage.addEventListener(KeyboardEvent.KEY\u UP,keyUpHandler);
}
//方法:向下键处理程序
私有函数keyDownHandler(evt:KeyboardEvent):void{
if(evt.keyCode==Keyboard.LEFT){
moveLeft=true;
}
else if(evt.keyCode==Keyboard.RIGHT){
moveRight=true;
}
else if(evt.keyCode==Keyboard.SPACE){
if(重力){
重力=假;
}
如果(!重力){
重力=真;
}
}
}
//方法:键向上处理程序
私有函数keyUpHandler(evt:KeyboardEvent):无效{
if(evt.keyCode==Keyboard.LEFT){
moveLeft=false;
}
else if(evt.keyCode==Keyboard.RIGHT){
moveRight=false;
}
}
//方法:移动玩家
公共函数movePlayer(){
//下移
y+=dy;
接地=假;
//***玩家的碰撞测试
//检查它是否落在平台上
陆地平台();
//向左移动
if(moveLeft){//相当于if(moveLeft==true)
如果(this.x>200){//移动播放器
这个.x-=dx;
}
否则{
level.moveLevel(dx);
如果(level.x>=0){//舞台停止移动,这样玩家就不会从屏幕上掉下来(左)
水平x=0;
这个.x-=dx;
如果(此.x<此.width/2){
this.x=this.width/2;
}
}
}
}
//右移
如果(向右移动){
如果(此.x<600){//移动播放器
这个.x+=dx;
}
否则{
level.moveLevel(-dx);
如果(level.x您需要更改

dy * flipGravity;


简单的输入错误?或者我应该进一步解释吗?可能是一个简单的输入错误,因为我看到你在其他地方使用了
+=
运算符。这和乘法一样。

这里面有什么问题吗?@jacksonecac我编辑了这个问题对不起。问题是如何在游戏中创建重力翻转机制,就像一个古老的游戏叫做重力guy@Jerrybibo我已经编辑了这个问题,请看一看谢谢。这有点帮助。但是反重力的东西仍然不起作用,我也不知道我做错了什么。@Gabriechan当你按下空格键时什么都没有发生?Nvm我自己解决了。这只是一个愚蠢的错误@NealDavis
dy *= flipGravity;