トピック
だにえる haru2016nen

★STGで敵を出現させたい★

シューティングゲームで *敵が出現するタイミング&敵の種類& 敵が出現する座標をDATAで 作ってみたいのですが、どうすれば いいのかサッパリなのです *敵の動き方のプログラムも出来て ません教えて下さい。 SPOFS, SPANIM, SPSET, SPSCALE, SPDEF, SPCLR, SPSHOW/HIDE, SPHOME SPHITSP 以上の命令は一応使ったことは あります。
5そうだね
プレイ済み
返信[1]
親投稿
イスターリャ arduinotexter
「敵が出現するタイミング&敵の種類&敵が出現する座標」を順番にDATAで定義 そして、行動パターンはDATAで「出現からのフレーム数,行動」で書くとOK
3そうだね
プレイ済み
返信[2]
親投稿
だにえる haru2016nen
敵No.1:ミニガブリン 画面の左右どちらかの端にしか 出現せず、出現後、y座標は変化せず 一直線に進んで来ます。 まずは、これをプログラムしたい。
1そうだね
プレイ済み
返信[3]
親投稿
だにえる haru2016nen
行動パターンは同じキャラなら 同様の動きをするようにしたい ので、 敵の出現タイミングのDATAとは別の DATAをつくれば良いのかな?
1そうだね
プレイ済み
返信[4]
親投稿
イスターリャ arduinotexter
最初のデータはそのままとして、移動は DATA側ではX速度を設定するだけ あとは、メインループで毎フレーム進ませる
2そうだね
プレイ済み
返信[5]
親投稿
イスターリャ arduinotexter
ああ、敵の種類に対して行動を別のDATAで定義しておく手も勿論ある
2そうだね
プレイ済み
返信[6]
親投稿
********** itd12d
defという手
1そうだね
プレイ済み
返信[7]
親投稿
だにえる haru2016nen
画像のようににしておいて、 IF 略=="A" THEN A IF 略=="B" THEN B DEF A, 管理番号か何か INC X[配列か何か] IF 画面外<X THEN SPCLR? END DEF B INC Y, RND(5)-RND(5) INC X END みたいにすればいいのかな?
0そうだね
プレイ済み
返信[8]
親投稿
だにえる haru2016nen
補足 Aのキャラだったら 一定方向に進むだけ。 Bのキャラだと上下に 動きながら進む。
0そうだね
プレイ済み
返信[9]
親投稿
********** itd12d
まあなんか適当に書くとこんな感じですかね def enmove1 t,x,y if t==0 then else endif end
1そうだね
プレイ済み
返信[10]
親投稿
あきと SideBurnsM
敵の前に弾は出てるんですか? 結果的に似たようなコードを書くことになるんだけど。
0そうだね
プレイ済み
返信[11]
親投稿
みむ*mim hidemimtp
DATAの使い方も、実行する例も、だにえるさん本人が書かれているようなのでOKだと思います。Friskさんのようにしても同じく。 ただ、 IF 略=="A" THEN A のようにしなくても、 CALL "ENE_MOVE_"+略 としておけば、敵Aなら「ENE_MOVE_A」がのDEFが呼ばれるので、その方がいいかも。 あとは敵が増えたときにどうやって呼ぶか、ですね。 FOR~NEXTで存在する範囲のスプライト番号を回すか、 SPFUNCを使うか、どちらかになると思います。 直線的な動きだけの敵ならSPANIMにする手もあります。
2そうだね
プレイ済み
返信[12]
親投稿
ぴくと kanau1203
同じくspfuncで番号別に行動パターンを登録しておくのが楽かと思います。
1そうだね
プレイ済み
返信[13]
親投稿
だにえる haru2016nen
SPFUNCって CALL SPLITE を利用するんですよね? 基本的にOUTを使って 座標とかを取得すること になるんでしょうか?
0そうだね
プレイ済み
返信[14]
親投稿
だにえる haru2016nen
あと、SPVARも使いますか?
0そうだね
プレイ済み
返信[15]
親投稿
みむ*mim hidemimtp
おおまかな流れはこれで合っていると思います。 18行目は何だろう・・・動きが遅いのなら、13,14行目の値をCOS(RD)*3とかにすべきです。VSYNCは基本的に1固定で。 座標は SPOFS SP OUT でも、SPVARでもどちらでも。 厳密に言えば若干の誤差が出るんですが、とりあえず無視して良いかと。私は前者をよく使います。SPVARが足りなくなるという理由もあり。
1そうだね
プレイ済み
返信[16]
親投稿
だにえる haru2016nen
あ、これはネットで見つけた サンプルプログラムを 改造(←VSYNCとか)したものです。
1そうだね
プレイ済み
返信[17]
親投稿
めぐりとやってることが 違いすぎるわね。 一体どーなってるのかしら??
1そうだね
プレイ済み
返信[18]
親投稿
だにえる haru2016nen
めぐり氏のプログラムって とっても流れが 分かりやすいのですよね! 「どうやって作ったらいいか」 というのではなく 「どんなものを作ろうか」 といった感じがします。 基本をマスターしちゃってるカンジ?
1そうだね
プレイ済み
返信[19]
親投稿
ありがとうなのよね~! 基本動作の反復練習。 同じようなゲーム 作り続けて基礎固めが できたってことなのかしら? 応用の効かない頭の 固さをクリアーできれば… むぎゅぎゅ~。
1そうだね
プレイ済み
返信[20]
親投稿
だにえる haru2016nen
こんな感じで良いでしょうか? GOTOじゃないとラベルに 文字列は使えない?
0そうだね
プレイ済み
返信[21]
親投稿
だにえる haru2016nen
あ、READのADDは無視して下さい。 座標を文字列にしたのは、 DATAを後々見やすくするためです。
0そうだね
プレイ済み
返信[22]
親投稿
だにえる haru2016nen
「引数が違う」ってエラーが出る。 何故だ?
0そうだね
プレイ済み
返信[23]
親投稿
だにえる haru2016nen
OUTを付けることで エラーは出なくなりました! でもこんなにOUTって必要?
0そうだね
プレイ済み
返信[24]
親投稿
みむ*mim hidemimtp
すばらしい。 でも疑問に思われている通り、何やら無駄が多い気がします。 6行目のREADを18,19行目の間に持ってきて、 11,12行目は「setting」とだけ書けばいいのでは? あと、C$・XY$は数値でいいのでは? DATA文を DATA 1,500,120,5,10 にして、20~23行目はいらないかも。DATA文の中にマイナスは書けますし。 SPSETの行は「SPSET C OUT SP」、 SPFUNCの行は「SPFUNC SP,FORMAT$("enemy%02D",C)」 でどうでしょうか。
1そうだね
プレイ済み
返信[25]
親投稿
だにえる haru2016nen
⇒⇒18,19間にREAD移動 *「敵を出現させる敵」を 考えているので、  このままでいいと思います。
1そうだね
プレイ済み
返信[26]
親投稿
だにえる haru2016nen
特に重要な問題がない限り、 C,X,Y は文字列にしようと思います。 振り当てる処理は<画像>なのですが これでCALL SPRITE をすると、 x=500→499.5にはなります。 でも、もう一度CALLしても x=499.5→499.5のままでした。 何が間違っているんでしょう?
0そうだね
プレイ済み
返信[27]
親投稿
だにえる haru2016nen
あ、画像です
0そうだね
プレイ済み
返信[28]
親投稿
だにえる haru2016nen
↑解決しました!
0そうだね
プレイ済み
返信[29]
親投稿
だにえる haru2016nen
無事、不具合なく動作したので トピックの題は果たされたようです。 当たり判定等は又の機会に。 最後に、 普通のDEFと処理のDEFとかで プログラムが見にくくなってしまって で、それで スロット0にメインプログラム、 スロット1に普通のDEF、 スロット2に処理のDEF、 スロット3にDATA、 といった感じには出来ますかね?
0そうだね
プレイ済み