HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0712
K'Hシューティングゲームをつくりたい7解決


K'H

リンク

2012/7/12(Thu) 18:28:42|NO.47630

シューティングゲームを作ろうと思い、以下のようなスクリプトを組みました。
picload "haikei.bmp",1
nokori=30 pos 0,0 color 255,255,255 mes nokori posx=260 posy=400 pos posx,400 picload "機体.bmp",1 *main getkey migi,39 getkey hidari,37 getkey tama,32 if migi=1 :gosub *migi1 if hidari=1 :gosub *hidari1 if tama=1 :gosub *tama1 wait 5 goto *main *migi1 posx++ pos 0,0 picload "haikei.bmp",1 pos 0,0 color 255,255,255 mes nokori pos posx,400 picload "機体.bmp",1 return *hidari1 posx-- pos 0,0 picload "haikei.bmp",1 pos 0,0 color 255,255,255 mes nokori pos posx,400 picload "機体.bmp",1 return *tama1 nokori-- if nokori<=0{ pos 0,0 picload "haikei.bmp",1 pos 0,0 color 255,255,255 mes 0 pos posx,400 picload "機体.bmp",1 return}else{ pos 0,0 picload "haikei.bmp",1 pos 0,0 color 255,255,255 mes nokori pos posx,400 picload "機体.bmp",1 return }
ここで、分からないことがでたので、教えてください。
1.玉の表示
2.敵の表示
3.当たり判定の方法
また、不要な部分や、変えられる部分もあれば、教えてください。



この記事に返信する


流星群

リンク

2012/7/12(Thu) 18:37:53|NO.47631

画像を使っているため実行できないので
基本的な敵の作り方を
説明とスクリプトでいきます。

まず dim命令で、まあ、敵、敵のx,y座標をdimで作りましょう。
とりあえず10個つくります

dim enemy,10
dim enemyx,10
dim enemyy,10

次とても長くなるので続きます



流星群

リンク

2012/7/12(Thu) 18:44:19|NO.47632

今回は変数をたくさん用意します

まず etime : エネミー出現までの時間。
次に ecnt : 配列変数を使うのでカウントを用意します

まあこれだけでできます。
とりあえず未完成のソースを教えます。
そこからどうしたらよいか考えてみてください。
無理だったら次はソース全てを書きます。

dim enemy,10 dim enemyx,10 dim enemyy,10 etime=0 : ecnt=0 *enemyact //エネミーの行動のサブルーチン etime+1 if etime>100 { enemy(ecnt)=0 : enemyx(ecnt)=300 : enemyy(ecnt)=32 ecnt+1 : etime+1 } return これだけでは 未完成です。 配列変数の上限が来ないようにうまく調整するスクを作り、 描画スクリプトもつくりましょう。



K'H

リンク

2012/7/13(Fri) 00:02:52|NO.47645

忘れてましたが、

*tama1 nokori-- if nokori<=0{ pos 0,0 picload "haikei.bmp",1 pos 0,0 color 255,255,255 mes 0 pos posx,400 picload "機体.bmp",1 return}else{ pos 0,0 picload "haikei.bmp",1 pos 0,0 color 255,255,255 mes nokori pos posx,400 picload "機体.bmp",1 return }
の部分は、玉を発射しようと思いつけたものですが、途中で分からなくなったので、途中で
止まっています。
あと、画面端で止まるようにするには、どうしたらいいですか?



TMKL

リンク

2012/7/13(Fri) 01:13:08|NO.47649

自機の表示や背景の表示もまずいですね
picloadは画像を「読み込む」命令で「表示」には適していません
(実行速度が遅い 等)
bufferに読み込んで「gcopy」や「celput」でメイン画面に表示しましょう


んで、

1.弾の表示
自機の表示と同じです
弾のx座標、弾のy座標の変数を作り、
そこに表示しましょう
画像を使うなら bcopy、celput
プログラムで書くなら mes、pset、circle、boxf
が表示に適しています

また、
・発射されていない
・発射された
・画面外に出た
・敵に当たった
等の状況を判断するのに、
弾のフラグ変数も用意しましょう

発射されてなければ、あたり判定、移動、描画を行わない
発射されれば、あたり判定、移動、描画を行う
画面外に出たら、発射されていない状態に戻す
敵に当たったら、発射されていない状態に戻す

てな感じです

また、弾を複数打てるようにするなら、「配列変数」を使いましょう
(配列変数が何かわからなかったら、自分で調べてください)




2.敵の表示
表示は弾と同じです
状態は弾より増えると思います
・弾を打ってない
・弾を打った
等です

弾を打つまで自機に近づく
弾を打ったら逃げる
みたいな感じです

敵は間違いなく複数にすると思うので、
「配列変数」がお勧めです
(配列変数が何かわからなかったら、自分で調べてください)



3.当たり判定
STGは「円形の当たり判定」を使うのが一般的です
(敵の形によって変えても面白いかもしれません)

円形なら「二点間の距離の公式」を活用しましょう
(二点間の距離の公式が分からなかったら、自分で調べて下さい)



画面端で止めるには、
windowの横幅を取得して、自機座標にlimit関数を使いましょう



また、三角関数について勉強しておくと、
ホーミング弾、自機狙い弾など作れるので、余裕があったら調べた方がいいです




最後に、STGの作りの流れをつかむには
「えふすてやま 2合目」がお勧めです
http://hsp.tv/play/pforum.php?mode=pastwch&num=27498



KA

リンク

2012/7/13(Fri) 09:16:33|NO.47650

「自分でも訳が分からなくなったスクリプトです。」
と言う事ですか。

まず見やすくタブを入れ、コメントをいれることから
覚えて下さい。



kino

リンク

2012/7/15(Sun) 00:34:25|NO.47691

>また、不要な部分や、変えられる部分もあれば、教えてください。

repeat:stick k,15:wait 1:cls:pos x+300,400:mes"A":pos x+300,400-z1:mes"B":if k=1:x--:else:if k=4:x++:else:if k=16:z=1:else:if z=1:z1+=20:if z1>400:z1=0:z=0 loop
まあこれは冗談ですが、あまり難しく考えずに
自機や弾を文字等で代用したりして
最初は出来るだけシンプルなスクリプトから作っていくといいかもしれません。



K'H

リンク

2012/7/23(Mon) 21:49:57|NO.47855

kinoさんのおっしゃられているように、
簡単なことから始めようと思います。
みなさん、ありがとうございました。
解決です。



ONION software Copyright 1997-2023(c) All rights reserved.