アクションゲームデモ


使用しているFlashのバージョンは.5ですので、最新バージョンとの相違点があるかもしれません。

・また、手法やロジックについては、性能面で問題のある部分があるかもしれませんが、個人の趣味の範囲ということでご容赦ください。


1.フレームアクション
■フレーム19のアクション
//ステージ内の移動にかかわる変数の定義
// fiterの初期向き
_root.charamuki = "R";
// キャラの横移動の値
_root.charamovevalmax = 15;
// キャラのジャンプ時の横移動の値
_root.jumpmovevalmax = -5;
// キャラのジャンプ縦移動の値
_root.jumpmovemax = 15;
■フレーム25のアクション
//ステップの数(地面を含む)
_root.stepvalmax = 5;
//壁の数
_root.kabemax = 3;
//着地している初期ステップ(stepno = 1は地面)
_root.stepno = 1;
// キャラの横移動変数
_root.charamoveval = 0;
// キャラの縦移動変数
_root.jumpmoveval = 0;
// キャラの移動可能かのSW(0=Ok,1=NG)
_root.moveoksw = 0;
// キャラのジャンプ可能かのSW(1=ジヤンプ中)
_root.jumpsw = 0;
//fighterのアニメーション用
eval("_root.fighter").gotoAndPlay(22);
//fighterの各パーツを足の位置に整列させる
_root.fighter._y = _root.myfoot._y;
_root.fighter._x = _root.myfoot._x;
_root.mybody._y = _root.myfoot._y;
_root.mybody._x = _root.myfoot._x;
_root.myhead._y = _root.myfoot._y;
_root.myhead._x = _root.myfoot._x;
■フレーム39のアクション
//ステージ内の移動にかかわる変数の定義
// fiterの初期向き
_root.charamuki = "R";
// キャラの横移動の値
_root.charamovevalmax = 15;
// キャラのジャンプ時の横移動の値
_root.jumpmovevalmax = -5;
// キャラのジャンプ縦移動の値
_root.jumpmovemax = 15;

2.オブジェクトアクション
■DUMMYKEYのアクション ■myfootのアクション
// 右へ
on (keyPress "<Right>") {
if (_root.moveoksw == 0) {
_root.charamove = "R";
_root.charamuki = "R";
eval("_root.fighter").gotoAndPlay(1);
// キャラの移動変数
_root.charamoveval = _root.charamovevalmax;
_root.jumpmoveval = _root.jumpmovevalmax;
}
}
// ジャンプ
on (keyPress "<Up>") {
if (_root.moveoksw == 0) {
_root.moveoksw = 1;
_root.jumpsw = 11;
if (_root.charamuki == "R") {

eval("_root.fighter").gotoAndPlay(6);
} else {
eval("_root.fighter").gotoAndPlay(33);
}
}
}
// 左へ
on (keyPress "<Left>") {
if (_root.moveoksw == 0) {
_root.charamove = "L";
_root.charamuki = "L";
eval("_root.fighter").gotoAndPlay(28);
// キャラの移動変数
_root.charamoveval = _root.charamovevalmax*-1;
_root.jumpmoveval = _root.jumpmovevalmax*-1;
}
}
// しゃがむ
on (keyPress "<Down>") {
if (_root.moveoksw == 0) {
_root.charamove = "X";
if (_root.charamuki == "R") {
eval("_root.fighter").gotoAndPlay(55);
} else {
eval("_root.fighter").gotoAndPlay(61);
}
// キャラの移動変数
_root.charamoveval = 0;
}
}
// 止まる
on (keyPress "<Space>") {
if (_root.moveoksw == 0) {
_root.charamove = "X";
if (_root.charamuki == "R") {
eval("_root.fighter").gotoAndPlay(22);
} else {
eval("_root.fighter").gotoAndPlay(49);
}
_root.goalmoveval = 0;
// キャラの移動変数
_root.charamoveval = 0;
}
}
// 押す
on (keyPress "p") {
if (_root.moveoksw == 0) {
_root.charamove = _root.charamuki;
if (_root.charamuki == "R") {
// キャラの移動変数
_root.charamoveval = _root.charamovevalmax/2;
eval("_root.fighter").gotoAndPlay(67);
} else {
// キャラの移動変数
_root.charamoveval = _root.charamovevalmax/2*-1;
eval("_root.fighter").gotoAndPlay(70);
}
}
}
onClipEvent (enterFrame) {
_root.jumplimit = 5;
savex = this._x;
savey = this._y;
// 前回チェックでステップに乗っていたか?(stepno=1は地面)
if (_root.stepno>1) {
if (this.hitTest(eval("_root.step"+_root.stepno))) {
// まだそのステップに乗っている?
continue;
} else {
// もうそのステップに乗っていない?
//ジャンプ中にする
_root.jumpsw = 1;
//キーボードを無視させる
_root.moveoksw = 1;
//Fighterのアニメーション変更
if (_root.charamuki == "R") {
eval("_root.fighter").gotoAndPlay(19);
} else {
eval("_root.fighter").gotoAndPlay(46);
}
}
}

// 左右の移動
if (_root.charamove == "R" or _root.charamove == "L") {
if (_root.jumpsw == 0) {
// ジャンプ中でないなら標準の移動値
this._x = this._x+(_root.charamoveval);
} else {
// ジャンプ中なら標準の移動値+アルファ
this._x = this._x+(_root.charamoveval+_root.jumpmoveval);
}
}

// 上昇中?
if (_root.jumpsw > 1) {
// ジャンプ中の壁との接触チェック
_root.kabeno = 0;
for (i=1; i<=_root.kabemax; i++) {
if (this.hitTest(eval("_root.wall"+i))) {
_root.kabeno = i;
i = 999;
}
}

//壁にぶつかったときの処置(Fighter逆向きにする)
if (_root.kabeno>0) {
if (_root.charamuki == "R") {
_root.jumpmoveval = _root.jumpmovevalmax*-1;
// キャラの移動変数
_root.charamoveval = _root.charamovevalmax*-1;
_root.charamove = "L";
_root.charamuki = "L";
} else {
_root.jumpmoveval = _root.jumpmovevalmax;
// キャラの移動変数
_root.charamoveval = _root.charamovevalmax;
_root.charamove = "R";
_root.charamuki = "R";
}
//Fighterのアニメーション変更
if (_root.charamuki == "R") {
eval("_root.fighter").gotoAndPlay(6);
} else {
eval("_root.fighter").gotoAndPlay(33);
}
} else {
continue;
}

//
_root.jumpsw = _root.jumpsw-1;

// まだ上昇中?
if (_root.jumplimit < _root.jumpsw) {
this._y = this._y-_root.jumpmovemax;
// ステップとの接触チェック
_root.stepno = 0;
for (i=0; i<=_root.stepvalmax; i++) {
if (_root.myhed.hitTest(eval("_root.step"+i))) {
_root.stepno = i;
i = 999;
}
}
if (_root.stepno == 0) {
continue;
} else {
this._y = savey;
// 落ちるフレーム(アニメ−ション用)
_root.jumpflame = 12;
// 降下へ
_root.jumpsw = 1;
}
} else {
// 下降中
this._y = this._y + _root.jumpmovemax;
// ステップとの接触チェック
_root.stepno = 0;
for (i=0; i<=_root.stepvalmax; i++) {
if (this.hitTest(eval("_root.step"+i))) {
_root.stepno = i;
i = 999;
}
}
if (_root.stepno == 0) {
continue;
} else {
// ステップに着地していればステップのY位置とFighterの足の位置を合わす
this._y = eval("_root.step"+_root.stepno)._y;
// 着地フレーム
_root.jumpflame = 10;
// 降下へ
_root.jumpsw = 1;
}
}

} else {
//下降中?
if (_root.jumpsw == 1) {
// ステップとの接触チェック
_root.stepno = 0;
for (i=0; i<=_root.stepvalmax; i++) {
if (this.hitTest(eval("_root.step"+i))) {
_root.stepno = i;
i = 999;
}
}
if (_root.stepno == 0) {
// ステップに着地していないなら下降を続ける
this._y = this._y+_root.jumpmovemax;
} else {
//ジャンプ終わりに
_root.jumpsw = 0;
// ステップに着地していればステップのY位置とFighterの足の位置を合わす
this._y = eval("_root.step"+_root.stepno)._y;
//Fighterのアニメーション変更
if (_root.charamuki == "R") {
eval("_root.fighter").gotoAndPlay(6);
eval("_root.fighter.Fjump").gotoAndPlay(_root.jumpflame);
} else {
eval("_root.fighter").gotoAndPlay(33);
eval("_root.fighter.Fjump").gotoAndPlay(_root.jumpflame);
}
}
}
}

// 下へ
if (_root.charamove == "D") {
}
// 壁との接触チェック
_root.kabeno = 0;
for (i=1; i<=_root.kabemax; i++) {
if (this.hitTest(eval("_root.wall"+i))) {
_root.kabeno = i;
i = 999;
}
}

// 壁にぶつかっているなら、このイベントの最初のX位置に戻す
if (_root.kabeno > 0) {
this._x = savex;
}
// Fighterの全てのパーツを足の位置に合わす。
_root.fighter._y = this._y;
_root.fighter._x = this._x;
_root.mybody._y = this._y;
_root.mybody._x = this._x;
_root.myhead._y = this._y;
_root.myhead._x = this._x;
}