嗨,我正在尝试制作一个重力翻转作为机制的游戏,就像旧的迷你剪辑游戏重力家伙一样,但我似乎无法让它工作。请帮忙
这就是我脑海中的理论。我有一个电影剪辑,它总是下降/这个.但是一旦它与平台发生碰撞,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的代码,但是当我按空格时,似乎什么也没发生。
这是我所有的文件。链接
你需要改变
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 }