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

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

今考えている自機の攻撃方法なのですが自機の弾は直進弾のみで、自機の周りにオプションを回転させて
色んな方向に撃てるようにしようと思っています。

そのオプション?みたいなのを作ってみました。
とりあえず自機の周りをまわるだけですが・・・
*************************************
*start
#include "hspdxfix.as"
;■ DirectX 初期化&チェック
dialog "fullscreenで起動しますか?「はい」を選択した場合、画面解像度を640×480に変更します。",2,"Config"
if stat=6:screenmode=0
if stat=7:screenmode=1
es_ini 2048,1024,360;スプライト最大数2048,キャラクタ最大数1024,角度360度
es_screen 640,480,16,0,screenmode,1;directX使用時の解像度640*480
if stat=1 : goto *dxerr1
if stat=2 : goto *dxerr2
goto *setup
*dxerr1
dialog "DirectXの初期化に失敗しました。",1 : end
*dxerr2
dialog "スクリーンの初期化に失敗しました。",1 : end
*dxerr3
es_bye : wait 100
dialog "VRAMの容量が不足しています。",1 : end

*setup
;■ バッファへ画像の読みこみ
buffer 2,640,480,0 ;バッファ作成
pos 0,0 : picload "jiki11.gif",1 ;バッファへ読み込み
es_buffer 0,0 ;オフスクリーンバッファへの転送
if stat=1 : goto *dxerr3

;自機0-9
es_size 32,32,10,0
repeat 9 : es_pat cnt,32*cnt,0 : loop
;自機ビット1,10
es_size 16,16,0,0
es_pat 10,0,32,0
;自機ビット2,11
es_size 16,16,0,0
es_pat 11,0,32,0

;■スプライト登録
es_window 0,0,640,480 ;スプライト描写範囲設定
es_area -64,-64,640,480 ;スプライト有効範囲設定

es_set 2000,px,py,4 ;自機スプライト登録(1)
es_type 2000,4 ;自機Type値設定(1)

gsel 0
es_cls
es_sync
wait 100

*gamesetup
bitk=30.;自機からビットまでの距離
r=0.;角度
r=6.283/360;角度(3.1415の2倍÷360)
bitr1=0;ビット1の開始角度
bitr2=180;ビット2の開始角度
ship=4;自機傾きの為の変数
px=192:py=448 ;自機の初期位置
move=4 ;自機速度
gtime=0 ;フレーム数

;■ メインルーチン
*main
es_cls;画面クリア
gosub *jikimove
gosub *bitmove
es_draw;スプライト描画
gosub *kabehyouji
gosub *fpshyouji
await 0
es_sync 16
getkey syuryo,27:if syuryo=1:end;ESCを押すと強制終了
gtime=gtime+1 ;タイムテーブルの為の変数
goto *main

*jikimove;自機移動処理
stick ky,15;キーボードのチェック,非トリガータイプ設定
xv=(ky>>2&1)-(ky&1);x軸移動処理
yv=(ky>>3&1)-(ky>>1&1);y軸移動処理
px=xv*move+px : py=yv*move+py;自機移動処理
;画面からはみ出さない為の処理
if px<0 :px=0
if px>384 :px=384
if py<0 :py=0
if py>448 :py=448
;傾きの為の処理
if gtime¥4=0:if (ky=0)&(ship<4) :ship++;キーを押していない時で傾いている時は戻す
if gtime¥4=0:if (ky=0)&(ship>4) :ship--;キーを押していない時で傾いている時は戻す
if gtime¥4=0:if (ky=2)&(ship<4) :ship++;↑キーのみを押している時で傾いている時は戻す
if gtime¥4=0:if (ky=2)&(ship>4) :ship--
if gtime¥4=0:if (ky=8)&(ship<4) :ship++;↓キーのみを押している時で傾いている時は戻す
if gtime¥4=0:if (ky=8)&(ship>4) :ship--
if gtime¥4=0:if xv=1 :if ship!8 :ship++;キーを押した時で傾向ききってない時は傾ける
if gtime¥4=0:if xv=-1 :if ship!0:ship--;キーを押した時で傾向ききってない時は傾ける

es_chr 2000,ship;キャラクタNO変更
es_pos 2000,px,py;スプライト表示(バッファ画面)
return

*bitmove;ビット移動処理
;ビット1移動処理
bitr1=bitr1+5;ビットの移動速度
a=r*bitr1;ビットの移動距離
es_set 2001,bitk*cos(a)+px+8,bitk*sin(a)+py+8,10;ビット移動
if bitr1=360 : bitr1=0;ビットの角度を戻す
;ビット2移動処理
bitr2=bitr2+5
a=r*bitr2
es_set 2002,bitk*cos(a)+px+8,bitk*sin(a)+py+8,11
if bitr2=360 : bitr2=0
return

*kabehyouji
color 0,0,50
es_boxf 416,0,640,480;画面右をを塗り潰す
return

*fpshyouji
;fps表示
font "msgothic",18,0
es_getfps fps
color 255,255,255
pos 416,460
es_fmes "Fps "+fps
pos 416,0
es_fmes"It cancels with Esc"
return
*************************************
HSP3.0使用 hspdxfix.DLL使用 画像は↓を使用
jiki11.gif
コレを実行すると自機の周りをオプションが回転します。
自機を回転の中心として、サイン、コサインで角度を計算して表示させているだけですが・・・
こんな感じです↓
712.jpg
でも、まだこの動きでいくのか、ガレッガみたいな感じにしようか悩み中です。

それとプレイ画面を今までは中央に持ってきていたんですが、その場合左右の壁を別々に表示させていたので
そうするよりも、プレイ画面を左側に持ってきて、右側の壁だけ表示するようにすれば軽くなるかな?と思って変更してみました^^
PR
この記事にコメントする
お名前
タイトル
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
カウンター
ゲーマータグ
Twitter
携帯百景
カレンダー
11 2017/12 01
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
31
最新コメント
[11/24 kt.]
[11/24 kt.]
[11/24 NONAME]
[11/23 NONAME]
[10/05 tejas]
プロフィール
HN:
kt.
HP:
性別:
男性
自己紹介:
STG大好きな40歳。
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
アクセス解析
忍者ブログ [PR]