FLASHで格闘ゲーを作りたい!
しかし、格闘ゲーの作り方が全くわからない・・・。
HPの設定の仕方とか、当たり判定のつけ方とか・・・。
ツクールなんか買ってられるか!FLASHで作るんだぃ!
って思ったんだけど、全然成功しないんです・・・orz
誰か助けてください、お願いします。 >>355はなんで>>370にしないと動かないのですか?
動かしたいものの中の第1フレームに記述すれば動くはずですよね。 >>407
>>379にも書きましたが
たしかに動かしたい物の中に書けば動きます
しかしそれはフォーカスが当たっている間のみなので
対象のMCを一度クリックしてやらないといけないし、
ほかのMCにフォーカスがあたるとまた動かなくなります
今回の場合そんなやり方は非効率的ですしflashが動作している間ずっと
キーイベントが受け取れればベストなはずです
flashが動いている間ずっとキーイベントを受け取りたい場合は
stageに登録してやるとflashにフォーカスが当たっている間
常にキーイベントが取れるというわけです >>408
むは、ごめんなさい>>379スルーしてました。 書き込んでしまった。
>>408
これまた丁寧にありがとうございます。
クリックすれば動きはするんですね。
難しい。
アルゴリズムマニアックス買ってきた。
こちらはとても面白い。
なんか色々妄想してしまいますね。 必殺技のコマンドがわからんね
押したキーの取得は分かるが、一定時間以内に入力したかどうかを
判定する必要があると思うけど、どうやるのだろう
一定時間ごとに変数消す、ぐらいしか思いつかない
というかこれから作る必要のある、当たり判定やらキャラ選択やら考え出したら
頭パンクしそう >>411
>押したキーの取得は分かるが、一定時間以内に入力したかどうかを
ttp://hakuhin.hp.infoseek.co.jp/main/as3/date.html#DATE_00
↑ここの「測定中の経過時間を調べる」を参考に試してみれば良いかと。
>というかこれから作る必要のある、当たり判定やらキャラ選択やら考え出したら
>頭パンクしそう
当たり判定は妥協する点によって難易度が違うと思う。
他に作るべきモノはまだあるけど、一つ一つこなしていきましょう。
なるべくここを覗きますので。
がんばれ。 >>411
コマンドは入力したキーと時間を配列に溜めていけばいける気がする
・・・と思ったけどどんなゲームにするかによっては難しくなるかな・・・?
状態遷移を考えてみるといいかもしれません
当たり判定は精度によってだいぶ難易度が変わるけど、ある程度すばやい格闘ゲームなら
そこまで精度を高くしなくてもごまかせるので、とにかく単純化して考えた方がいいです
当たり判定はすべて矩形で十分それっぽくみえます
キャラは形式化しておくのがポイントです
ある基本クラスから継承していろいろなキャラのクラスを作っておけば、
基本クラスだけを考えるだけですべてのキャラに適用できます
キャラ選択ってGUIのことだったかな・・・?w
一気にやると自分でもごちゃごちゃになる 安心してくださいww function xBlur(eventObject:Event):void { // 追加
var nBlur:Number = ぼかす値;
var myBlur:BlurFilter = new BlurFilter(nBlur, nBlur/2);
filters = [myBlur];
}
これの最後[myBlur]の配列インスタンス名は何になるの? ん・・・?
ごめんなさい意味がよくわからないです。。。
filtersがどのインスタンスに適用されるかってことですかね? ああ…なんかわけのわからんこと言ってるのかな…。
配列ってmy_array[0]みたいにmy_arrayって名前が付いてるじゃない。
[myBlur]ってその名前がないじゃない。
変じゃない? あぁなるほど
それは配列を初期化するときに使うものです
var arr:Array = new Array(myBlur);
と
var arr:Array = [myBlur];
は同じ意味です >>417
そこで言うところのarrの部分が無い気がするんですよ。
filtersはプロパティだし。
>>414って
var arr:Array = [myBlur];
を更に省略して
[myBlur];
だけで配列作って中に素材突っ込んでるんですよね?
深く考えずにフィルタかけるときはこんなもんって覚えとくものなのかな。
脳みそパンクしそうだ。 >>418
いやそのfiltersがプロパティであり配列なんですよ
filters = [myBlur, myGlow];
とか複数を配列にして渡すことでいろんな効果を重ねがけできるんです
ためしにtrace(filters[0]); とかやってみれば配列であることがわかるはずです
package {
import flash.display.Sprite;
import flash.filters.BlurFilter;
import flash.filters.GlowFilter;
public class Test extends Sprite {
public function Test():void {
var mc:Sprite = new Sprite();
mc.graphics.lineStyle(1);
mc.graphics.drawCircle(0, 0, 50);
mc.graphics.endFill();
addChild(mc);
mc.x = stage.stageWidth / 2;
mc.y = stage.stageHeight / 2;
var blur:BlurFilter = new BlurFilter();
var glow:GlowFilter = new GlowFilter();
mc.filters = [blur, glow];
trace(mc.filters[0]); //[object BlurFilter]
trace(mc.filters[1]); //[object GlowFilter]
}
}
} キャラ絵を全部かいてたら、それだけでキャラ一人当たり2ヶ月以上かかりそうなので
3Dモデル使って効率よく進めてみようと思う。
で、いまblenderの基礎勉強しています。
12キャラくらいは作りたいなぁ。 >>419
>ためしにtrace(filters[0]); とかやってみれば配列であることがわかるはずです
あああ最初からそうすればよかったんですね。
ごめんなさい。
スッキリです。
ありがとう。 うん。
if分岐がまだ甘いんだ。
たぶんキャラも一から作り直すと思う。 歩き、しゃがみ、ダッシュ、バックステップ
ジャンプ、前斜めジャンプ、後ろ斜めジャンプ
空中ダッシュ、空中バックステップ、しゃがみからのハイジャンプ
はつけた モデリング難すぎワロタ
今更ながら、これは手描きのが早いかも・・
でももう少し頑張ってみようかな http://swfup.info/view.php/10796.swf
やっぱ2Dでいく・・
キャラも一から作り直す。とりあえず立ち絵のみ。
CS4の新しいトゥイーン使いづらいなぁ・・ ttp://swfup.info/view.php/10871.swf
今可能な動作
左右移動 ジャンプ しゃがみ 立ち状態でのZ・X攻撃
ダッシュ、ダッシュジャンプ、ダッシュバック
どうにもダッシュの挙動があやしい・・・
ヘルプ ttp://www1.axfc.net/uploader/Ne/so/53108
ソース if (isLeft&&motion==false) {
//左移動
if (lefttime==false) {
//一回目の左入力時間記録&普通に歩き
lefttime=true;
time=getTimer();
human.x-=3;
human.gotoAndStop("walk");
trace("left");
}
else if (lefttime==true&&getTimer()-time<300&&getTimer()-time>30) {
//0.03秒以上0.3秒未満の間隔で左入力するとダッシュ開始
lefttime=false;
stage.removeEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
stage.addEventListener(Event.ENTER_FRAME,onEnterFrameDash);
}
else {
//それ以外の間隔なら普通に歩き
lefttime=false;
time=0;
human.x-=3;
human.gotoAndStop("walk");
}
} キーを押す(1回目)→キーを離す→キーを押す(2回目)=間隔内であればダッシュ成立
↑が基本だと思っていますが、キーを離す時の処理が無いから上手く動作しないのでは? キーを離したときの処理、押したときの処理は別のメソッドで動いていて、
離した瞬間に初期状態に戻るようになってます
isLeftっていう条件は押している状態です
439のスクリプトはonEnterFrameHandlerの一部です。
左を連続入力すると、このメソッドを止めて↓を開始します
//左ダッシュ処理
function onEnterFrameDash(event:Event):void {
human.gotoAndStop("dash");
if (isLeft==true&&isUp) {
//左と上を押しているなら左ダッシュジャンプ開始
stage.addEventListener(Event.ENTER_FRAME,onEnterFrameDashJump);
stage.removeEventListener(Event.ENTER_FRAME, onEnterFrameDash);
}
else if (isLeft==true) {
//左にダッシュ
human.x=human.x-6;
}
else {
//ダッシュ止め&初期状態に
human.gotoAndStop("normal");
lefttime=false;
stage.addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
stage.removeEventListener(Event.ENTER_FRAME, onEnterFrameDash);
}
} ソースあったのね。
>>439しか見てなかった。スマソ。
キーを入力した時「今回は何回目」という情報が無いからかな。
毎回押された時に一回目として判断していると思う。
キー入力後、最初のフレームで毎回リセット&入力時間記録。
押し続けて2フレーム目で間隔判定。
この時間隔の最小値(0.03秒)が小さすぎるため、フレームによっては判定が成立してしまい
一度押しただけでもダッシュ出来てしまう。
現在の状況はこんな感じかと。 なるほど・・間隔ですか
あとは押し続けた後、一瞬はなしてもう一度入力したときに
ダッシュするのを防ぐ工夫がいるようですね コマンド入力の間隔をミリ秒じゃなくってフレーム数でやってみると
すこし誤差は、出るもののスクリプト組みやすいよ。
いまだにダッシュであーでもないこーでもない中
なんぞー 2ch格闘を解析しているのですが、
キャラクター選択でどん詰まりました。
キャラ選択は大体わかったのですが
インスタンスを"giko"または"si"と名付けている場所がわかりません…。
それとも何か変な勘違いしているのか。
助けて ライブラリの、書き出しの名前が「A_Char_giko」「A_Char_si」のムービークリップを
呼び出してステージに配置するようになっているんじゃないかな。
フレーム50あたりの、「//ゲーム」のラベル部分の「mainStage」インスタンスに
scriptが書かれているね。
間違ってたらゴメンね。