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