当前位置: 首页 > 知识库问答 >
问题:

如何创建重力翻转机制(动作脚本 3)

鲜于承基
2023-03-14

嗨,我正在尝试制作一个重力翻转作为机制的游戏,就像旧的迷你剪辑游戏重力家伙一样,但我似乎无法让它工作。请帮忙

这就是我脑海中的理论。我有一个电影剪辑,它总是下降/这个.但是一旦它与平台发生碰撞,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;
            }
        }
    }
}
}

这是上面的玩家类

我在主类中运行了一个gameloop,它调用了move player的函数。

所以当重力为假时,玩家会漂浮起来,当重力为真时,玩家会下降。我已经写了dy乘以-1的代码,但是当我按空格时,似乎什么也没发生。

这是我所有的文件。链接

共有1个答案

栾瑞
2023-03-14

你需要改变

dy * flipGravity;

dy *= flipGravity;

简单的错字?或者我应该进一步解释?可能是一个简单的错字,因为我看到你在其他地方使用了=运算符。这就像那样,但有乘法。

 类似资料:
  • 有一些通过rest API公开的CRUD性能测试,rest API将测试名称作为参数。每次创建新的测试时,都必须创建一个新的JMeter文件来命中此endpoint。我不能使用一个Jmeter脚本来运行所有测试,因为使用Jmeter输出的报告框架使用单个Jmeter文件来显示输出-Jmeter fileName Vs Time。除了三个参数外,JMeter脚本的配置都是相同的。是否有一种方法可以自

  • 问题内容: 这听起来像是一个非常笼统的问题,但这是正确的。 我有一个要求,以创建我的应用程序配置脚本,将生成的这种配置的结果(基本,,)。我的问题是,我应该从哪里开始构建?有没有我可以效仿的例子? 问题答案: 要创建标准的“配置”脚本,您需要GNU autoconf。您可能还需要GNU automake和libtool。 有大量的文档和指导。谷歌搜索“ autoconf automake howt

  • 我在 Jenkins 中创建了一个管道作业,我需要创建一个管道脚本来显示开发阶段的失败和不稳定的构建。在 Jenkins 2.0 中创建此脚本的步骤是什么,或者是否有任何示例管道脚本

  • 问题内容: 我需要通过运行设置服务器的脚本来添加cron作业。我目前正在使用Ubuntu。我可以使用,但这将打开一个编辑器来编辑当前的crontab。我想以编程方式执行此操作。 有可能这样做吗? 问题答案: Cron作业通常存储在每个用户的文件下 您要做的最简单的事情可能就是创建一个配置了作业的文本文件,然后将其复制到cron spool文件夹中,并确保它具有正确的权限(600)。

  • Hyperf 提供了创建模型的命令,您可以很方便的根据数据表创建对应模型。命令通过 AST 生成模型,所以当您增加了某些方法后,也可以使用脚本方便的重置模型。 php bin/hyperf.php gen:model table_name 创建模型 可选参数如下: 参数 类型 默认值 备注 --pool string default 连接池,脚本会根据当前连接池配置创建 --path strin

  • 创建组件脚本 在 Cocos Creator 3D 中,脚本也是资源的一部分。你可以在资源编辑器中通过点击"创建"按钮来添加并选择 TypeScript 来创建一份组件脚本。此时你会在你的资源编辑器中得到一份新的脚本: 一份简单的组件脚本如下: import { _decorator, Component, Node } from 'cc'; const { ccclass, property }