忍者ブログ
まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ステージ作製を進めて行こうかと思ったのですが、それよりも先にゲームシステムを
もっと作り込んでからでないと、後で調整するのが大変そうだと思ったので
入れようと思っていたプレイヤーセレクトを考えてみました。

あまり選べる種類が多いのは好きではないので、選択は2種類にしようかと思っています。
もちろん、攻撃ワイド&自機低速タイプと攻撃直進&高速タイプです(笑)
で、攻撃ワイドの方は現在のオプションが自機の周りを回転するギミックで良いかと思っているのですが
攻撃直進の方は、グラディウスのオプションのような動きにさせたいと思って
色々と考えてみたのですが良い方法も浮かばず、検索してみたら
とても良いスクリプトを公開されているページを発見しました^^

ZEROQOOO.comさんと言うページのHSPプログラミング講座にある
サンプルスクリプト集にグラディウス風のオプションを動かすスクリプトがありました。

それを参考に簡単なスクリプトを作って考えてみました↓
*********************************************
 screen 0,240,320,0,0,0 ;メインウインドウ0を240×320で用意
 px=112:py=304 ;自機の初期位置
 dim Opx, 100
 dim Opy, 100
 repeat 100
 Opx.cnt=px
 Opy.cnt=py
 loop

*main
 redraw 0 ;仮想画面を指定
 color 0,0,0 ;色に黒を指定
 boxf 0,0,240,320 ;指定色で画面を塗りつぶす

;オプション移動処理
*Option
 Opx. 0 = px : Opy. 0 = py    ; 自機の座標を、代入
 if (vx=0) : if (vy=0) { goto *abc }   ; ※ここの先頭に「;」を付けるとトレース
 a = 79 : b = 80
 repeat 80
  Opx. b = Opx. a    ; 1~80のオブジェクト代入
  Opy. b = Opy. a
  a -
  b -
 loop
*abc
 color 255,90,0
 pos Opx. 15, Opy. 15 : mes "▲" 
 pos Opx. 30, Opy. 30 : mes "▲"
 pos Opx. 45, Opy. 45 : mes "▲"
 pos Opx. 60, Opy. 60 : mes "▲"

;自機移動処理
 vx=0 : vy=0
 stick ky,15 ;キーボードのチェック
 if ky&1 : px-=4 : vx=1 : if px<0 :px=0
 if ky&4 : px+=4 : vx=1 : if px>224 :px=224
 if ky&2 : py-=4 : vy=1 : if py<0 :py=0
 if ky&8 : py+=4 : vy=1 : if py>304 :py=304
 pos px,py ;自機の座標指定
 color 0,255,255 : mes "▲" ;青で▲を表示

 redraw 1 ;画面を更新 
 await 1
 getkey syuryo,27:if syuryo=1:end;ESCを押すと強制終了
 goto *main ;*mainに戻る
*********************************************
hsp 3.0使用

このスクリプトを動かすと↓こんな感じ
2007_5_51.jpg
青い▲が自機で、オレンジの▲がオプションです。自機の動きに合わせて
くっついてきます^^

考え方としては、自機の座標を50フレーム分くらい配列変数に覚えさせて
その配列変数から表示させたい部分の配列を取り出して表示するって感じ。

例えば自機の座標がx=200、y=200だったとします。
オプションの初期位置も最初は同じなので、オプションの座標をOpx.cnt、Opy.cntとして
repeatで↓のように設定します。
repeat 100
 Opx.cnt=px
 Opy.cnt=py
 loop
回数は100でなく、使う配列分で良いのですが、気分的な問題です^^;
で、pos px,py : mes "▲"//pos Opx. 15, Opy. 15 : mes "▲" で▲を表示すると
自機とオプションは同じ位置に表示されますよね。

次に自機がx方向に4ドット、y方向に4ドット動いたとします。
すると自機座標はpx=204 : py=204です。
オプションの方はと言うと↓の部分で計算しています。
*********************************************
 Opx. 0 = px : Opy. 0 = py    ; 自機の座標を、代入
 a = 79 : b = 80
 repeat 80
  Opx. b = Opx. a    ; 1~80のオブジェクト代入
  Opy. b = Opy. a
  a -
  b -
 loop
pos Opx. 30, Opy. 30 : mes "▲"
*********************************************
repeat 80のところが肝です。
このリピートをバラして考えてみると(x軸部分だけで考えてみます)
Opx. 80 = Opx. 79
Opx. 79 = Opx. 78
Opx. 78 = Opx. 77



Opx. 3 = Opx. 2
Opx. 2 = Opx. 1
Opx. 1 = Opx. 0
と言う事をやっている訳です。

最初にOpx. 0 = px : Opy. 0 = py   として自機の座標を代入しているので
自機が移動した1ループ目は
Opx. 1のみ204になります。
次に自機が移動した2ループ目は
Opx. 1とOpx. 2が204になります。
コレの繰り返しで最終的にOpx. 80が204になるって事です。

でオプションの表示をpos Opx. 30, Opy. 30 : mes "▲"とかにすれば
自機移動より30フレーム遅れてオプションが自機の動きを追って
動かすようにする事が出来ます。

上記を踏まえて、プレイヤーセレクト用の自機スクリプトを作ってみました↓
グラディウス風オプションスクリプト

動かすとこんな感じ↓
2007_5_5.jpg
自機の動きに合わせて、オプションも移動します。
でも、オプション4機は強すぎかな?と思ってどうしようか考え中です^^;

そして、このスクリプトを応用すれば誘導レーザーや蛇のような敵も作れそうで
良い感じです^^

PR
この記事にコメントする
お名前
タイトル
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
Twitter
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
最新コメント
[04/20 kt.]
[04/19 うぇむ]
[11/24 kt.]
[11/21 NONAME]
[11/24 kt.]
プロフィール
HN:
kt.
性別:
男性
自己紹介:
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
忍者ブログ [PR]