横スクロールアクション ゲームを作成しようとしていますが、現在、キャラクターが歩いたりジャンプしたりしています。これまでに 3 つの攻撃アニメーションがあり、ほぼ機能します。これは私が達成しようとしているものです。プレーヤーが攻撃ボタンを押すとキャラクターが攻撃し、プレーヤーが攻撃ボタンを押し続けると攻撃/パンチシーケンスが続行されるか、別の攻撃キーが押されると攻撃/蹴りのアニメーションを切り替えます (注: プレイヤーがキーを押したままにする必要はありません。キーを押す必要があります)。
また、現在の攻撃アニメーションの途中で次のフレームにジャンプするのではなく、現在の攻撃アニメーションが完全に終了したら、次の攻撃アニメーションに移動するにはどうすればよいですか。したがって、キャラクターが攻撃しているときに攻撃キーが押されている間、キャラクターは現在の攻撃アニメーションを終了し、終了するとすぐに次の攻撃アニメーション フレームに移動します。それ以外の場合は停止します。配列を作成するか、クラスを拡張する必要があるため、これを行う方法がわかりません。このようなゲームを作成したいのですが、コピーを見つけましたが、AS2 にあります
https://www.dropbox.com/s/zhf68zmi0ktmeqq/DD%20%282%29.zip
これは私がこれまでに行ったことです
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.utils.*;
import com.greensock.TweenLite;
import com.greensock.easing.*;
import com.greensock.plugins.*;
public class Player extends MovieClip
{
TweenPlugin.activate([BlurFilterPlugin]);
//Player run speed setting;
var RunSpeed:Number = 8;
//Player key presses
var RightKeyPress:Boolean = false;
var LeftKeyPress:Boolean = false;
var UpKeyPress:Boolean = false;
//Jump variables
var Gravity:Number = 1.5;
var JumpPower:Number = 0;
var CanJump:Boolean = false;
var Jumped:Boolean = false;
//Dash variable
var Pressed:Boolean = false;
var LastKeyPressed:Number = -1;
var DashAmount:Number = 250;
var DoubleTapDelay:Number = 260;//-- delay in milliseconds
var Dashing:Boolean = false;
var RightDash:Boolean = false;
var LeftDash:Boolean = false;
public function Player()
{
stage.addEventListener(KeyboardEvent.KEY_DOWN,KeyDown);
stage.addEventListener(KeyboardEvent.KEY_DOWN,KeyPressed);
addEventListener(Event.ENTER_FRAME,Update);
}
function KeyDown(event:KeyboardEvent)
{
stage.removeEventListener(KeyboardEvent.KEY_DOWN, SecondDash);
//If key is down cannot dash
RightDash = false;
LeftDash = false;
//When Key is Down
if (event.keyCode == 39)
{
RightKeyPress = true;
}
if (event.keyCode == 37)
{
LeftKeyPress = true;
}
if (event.keyCode == 38)
{
UpKeyPress = true;
}
}
function KeyPressed(event:KeyboardEvent):void
{
stage.removeEventListener(KeyboardEvent.KEY_DOWN, KeyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, KeyUp);
//If on floor
if (CanJump)
{
//If right key is down
if (event.keyCode == 39)
{
if (event.keyCode == 39 && Pressed)
{
//If right key press matches with recent right key press, dash right
Dashing = true;
RightDash = true;
}
Pressed = true;
setTimeout(function(){Pressed = false}, DoubleTapDelay);
}
if (event.keyCode == 37)
{
if (event.keyCode == 37 && Pressed)
{
//If left key press matches with recent left key press, dash left
Dashing = true;
LeftDash = true;
}
Pressed = true;
setTimeout(function(){Pressed = false}, DoubleTapDelay);
}
}
}
function Update(event:Event)
{
//Adding gravity to the game world
JumpPower += Gravity;
//if player is more than 300 on the y-axis
if (this.y > 300)
{
//Player stays on the ground and can jump
JumpPower = 0;
CanJump = true;
}
//If already jumped and on floor
if (Jumped == true && CanJump)
{
//Cannot jump again
CanJump = false;
//If on floor and right key is pressed run right
if ((RightKeyPress))
{
gotoAndStop('Run');
scaleX = 1;
}
else if ((LeftKeyPress))
{
//Otherwise if on floor and left key is pressed run left
gotoAndStop('Run');
scaleX = -1;
}
//If no key is pressed stay idle
if ((!RightKeyPress && !LeftKeyPress))
{
gotoAndStop('Idle');
}
}
//If on floor and can jump
if (CanJump)
{
//If right key is pressed run right
if ((RightKeyPress))
{
x += RunSpeed;
gotoAndStop('Run');
scaleX = 1;
}
else if ((LeftKeyPress))
{
//otherwise if left key is pressed run left
x -= RunSpeed;
gotoAndStop('Run');
scaleX = -1;
}
if ((UpKeyPress))
{
//If up key is pressed then jump
JumpPower = -15;
CanJump = false;
gotoAndStop('Jump');
Jumped = true;
}
//If no key is pressed stay idle
if ((!RightKeyPress && !LeftKeyPress && CanJump))
{
gotoAndStop('Idle');
}
}
else if (CanJump == false)
{
//Otherwise if in air and right key is pressed move right
if ((RightKeyPress))
{
x += RunSpeed;
scaleX = 1;
}
else if ((LeftKeyPress))
{
//Otherwise if left key is pressed then move left
x -= RunSpeed;
scaleX = -1;
}
}
//If Dashing is true
if (Dashing == true)
{
//Dash right
if (RightDash == true)
{
stage.addEventListener(KeyboardEvent.KEY_DOWN, SecondDash);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, KeyPressed);
TweenLite.to(this,0,{blurFilter:{blurX:1000}});
TweenLite.to(this,0.2,{blurFilter:{blurX:0},x:x + DashAmount,ease:Expo.easeOut});
Dashing = false;
}
else if (LeftDash == true)
{
//Otherwise dash left
stage.addEventListener(KeyboardEvent.KEY_DOWN, SecondDash);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, KeyPressed);
TweenLite.to(this,0,{blurFilter:{blurX:1000}});
TweenLite.to(this,0.2,{blurFilter:{blurX:0},x:x - DashAmount,ease:Expo.easeOut});
Dashing = false;
}
}
else if (Dashing == false)
{
stage.removeEventListener(KeyboardEvent.KEY_DOWN, SecondDash);
}
this.y += JumpPower;
}
function SecondDash(event:KeyboardEvent)
{
stage.removeEventListener(KeyboardEvent.KEY_DOWN, SecondDash);
if (event.keyCode == 38)
{
TweenLite.to(this,0,{blurFilter:{blurX:0}});
TweenLite.to(this,0,{blurFilter:{blurY:1000}});
TweenLite.to(this,0.5,{blurFilter:{blurY:0},y:y - DashAmount,ease:Expo.easeOut});
}
}
function KeyUp(event:KeyboardEvent)
{
stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyPressed);
RightDash = false;
LeftDash = false;
if (event.keyCode == 39)
{
RightKeyPress = false;
}
if (event.keyCode == 37)
{
LeftKeyPress = false;
}
if (event.keyCode == 38)
{
UpKeyPress = false;
Jumped = false;
}
}
}
}