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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0320
LDhspdx.dllについての初歩的な質問です7解決


LD

リンク

2014/3/20(Thu) 17:47:24|NO.60782

初めまして。

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スクリプトエディタに入力して実行すると高確率でエラーが出てしまうので、
その場合は実行ファイルを作成してそちらから検証していただくようお願いします。



この記事に返信する


暇人

リンク

2014/3/20(Thu) 19:10:14|NO.60785

#ちょっと勘違いしてたので書き直し

es_copyの使い方動作には、特に問題ない
見た目のサイズが、変わってしまうのは
screenの画面サイズとes_screenの解像度が違うのが原因
screenとes_screenの設定を合わせれば良い

DiretXは自動でスケーリングを行うので
内部解像度はes_screenの設定で表示はウィンドウサイズになる

なので、320*240でゲームを作って、表示を640*480にしたい場合は
座標等を、いじる事無く簡単に変えられる(補間されるのでぼやけるが)



LD

リンク

2014/3/21(Fri) 01:12:10|NO.60795

迅速な回答ありがとうございます!

screenとes_screenの設定を400*400にして無事正確に表示させることができましたが、フルスクリーンモード化には失敗してしまいました。
調べてみたところ、そもそも解像度は320*240,640*480,800*600のいずれかにするのがよいとのことでした。(そうするとフルスクリーン化もできる)

そこで面倒ですが、敵の出現範囲を変更するなどして作品全体をそれらの大きさに合わせて修正することにしました。
DirectXの恩恵はフルスクリーンでこそ受けられるということらしく、もっと早く気づくべきでした・・・・・・。

暇人さん、本当にありがとうございました。



LD

リンク

2014/3/21(Fri) 01:26:12|NO.60796

追記です。
先の投稿の2段落目の内容はHSPに携わる者にとっては恐らく常識なのだと思います。
なので、暇人さんに直接向けて宛てた書き込みではなく、私と同程度の初心者に対しての書置きです。
お気を悪くされた方がいらしたら、申し訳ございませんでした。



暇人

リンク

2014/3/21(Fri) 02:36:43|NO.60798

>そもそも解像度は320*240,640*480,800*600のいずれかにするのがよいとのことでした。(そうするとフルスクリーン化もできる)
フルHDが当たり前の時代になった今だと320*240は既にフルスクリーンに出来ない環境が多い
640*480でもフルスクリーンで使えない環境もあるらしい(ノートPCとか)



LD

リンク

2014/3/21(Fri) 12:10:48|NO.60805

なるほど、確かに私が調べたサイトはどれも昔に更新が止まって古い情報が載っていたのでした。
盲点でした。800*600で検討したいと思います。



ZAP

リンク

2014/3/21(Fri) 17:42:23|NO.60811

最近のPC(特にノート)だとフルスクリーンへの対応が極めて限定的だったりするので、
ウインドウモードとフルスクリーンを選択できるようにしておいたほうが
多くの人にプレイしてもらえるのではないかと思います。



LD

リンク

2014/3/21(Fri) 22:49:23|NO.60813

ZAPさん、アドバイスありがとうございます。

選択できるようにしつつ、
DierctXを活かすために可能ならフルスクリーンでのプレイを行うよう最初に表記しておきます。



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