初めまして。
HSPの標準命令による縦スクロールSTGが一旦完成したため、
今度はhspdx.dllを使ってそれを改良しようと考えています。
昨日から複数のhspdx.dllについてのSTG製作講座をみながらコードを書き換えているのですが、
es_copyでの画像表示が上手くいきません。
具体的には、本来自機が表示されるべき座標に画像が現れず、その左上に縮小された画像が出てしまいます。
(表示させたい場所からは弾を発射することが出来ます)
この掲示板の過去ログや検索サイトを5時間程彷徨ったのですがこの段階でつまづいている例が無く、
どうしても解決策が思い当たらず途方に暮れています。
かなり程度の低い質問ではあると思うのですが、どうかお知恵を拝借させて頂けないでしょうか。
以下がコードです(標準命令での完成品の一部をDirectX用にしたものから必要なところだけを抜き出したものです)
pre
#include "hspdx.as"
es_ini 512,1024,360
es_screen 800,600,16,0,1,1
if stat=1 : goto *dderr1
if stat=2 : goto *dderr2
goto *start
*dderr1
dialog "DirectXの初期化に失敗しました",1:end
*dderr2
dialog "スクリーンの初期化に失敗しました",1:end
*dxerr3
es_bye : wait 100
dialog "VRAMの容量が不足しています。",1:end
*start
screen 0,400,400,,500,100
buffer 1,80,40
picload "自機と敵サンプル.bmp"
es_buffer 0,0
if stat= 1:goto *dxerr3
es_size 10,40,100
es_pat 0,0,0,0
gsel 0
es_cls
es_sync
wait 100
//自機の情報
x = 180
y = 360
jiki = 1
hp = 900
//自機の弾の情報
dim bullet,40
dim bullet_x,40
dim bullet_y,40
*main
es_cls 0,0,0
gosub *jiki_appear
gosub *jiki_process
gosub *jiki_bullet
if key & 128 : end
await 0
es_sync
goto *main
*jiki_appear
if (hp <= 0)and(exp_jiki = 0) {
exp_jiki = 1
jiki = 0
boss_stop = 1
}
if jiki = 0 : return
pos x,y
gmode 2,40,40
es_copy 0,0,0
return
//自機の操作ルーチン(弾の発射を含む)
*jiki_process
stick key,31
if key & 1:x = x-3
if key & 2:y = y-2
if key & 4:x = x+3
if key & 8:y = y+2
if key & 16 {
repeat 40
if (jiki =1)and(bullet(cnt) = 0) {
bullet(cnt) = 1
bullet_x(cnt) = x + 20
bullet_y(cnt) = y
break
}
loop
}
//自機が画面外に出ないようにする
if x < 0 :x = 0
if x > 360:x = 360
if y < 0 :y = 0
if y > 360:y = 360
return
//弾の処理と描画
*jiki_bullet
repeat 40
if bullet_y(cnt) < 0 : bullet(cnt) = 0
if bullet(cnt) = 1 {
bullet_y(cnt) -= 6
color 0,255,255
pset bullet_x(cnt),bullet_y(cnt)
}
loop
return
/pre
使用する画像はこちらです(passは hsp)
http://ww10.puny.jp/uploader/download/1395304888.zip
上記のコードをHSPスクリプトエディタに入力して実行すると高確率でエラーが出てしまうので、
その場合は実行ファイルを作成してそちらから検証していただくようお願いします。