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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0923
ラビcelputで画像が表示されない10解決


ラビ

リンク

2014/9/23(Tue) 22:22:15|NO.65186

プログラム初心者です。
自作ゲームを作ろうと奮闘してるのですが、どうしてもわからない事があったので質問させてください。

現在、マップ画像(1枚絵)を画面に表示させて、ゲームパッドでプレイヤーキャラを移動させるというサンプルプログラムを作っています。
移動可・不可の判定にはマップ画像にマス目上に付いた色を読み取って、条件分岐するような仕様を予定。

今の所、ゲームパッドの入力に応じて、マップ画像をスクロールさせて、擬似的に移動しているようにし、
プレイヤー座標のマップ画像の色を取得という所まではなんとかできました。
そして、次は条件分岐の作成に入ろうと思ったところで・・・問題が起きました。

今まで、celputで正常に表示されていたマップ画像が、追加の命令を1行追加するだけで、突然表示されなくなるのです。
どの命令がというのは、よくわかりません。色々とテストしている中でcolorやmesを入れただけで消えたりするので・・・。

とりあえず、ソースと使ってる画像ファイルを提示しますので、
もし、原因がわかる方が居ましたら、教えていただけませんでしょうか?

エラーも出ず、各命令の使い方を調べてもおかしい所は自分では発見できずで、悩み中です・・・。

画像ファイルダウンロード先(画像解像度は4096x2048 サイズ160KB)
http://ux.getuploader.com/peercase/download/17/map.png

ソースファイル(42行目のmes前コメントを外すとマップが表示されなくなる)

#include "mod_joystick.as" ;バッファにマップ画像をロード celload "map.png",0 ;画像解像度は4096x2048(160KB) celdiv 0,0,0,ginfo_sx/2-200,ginfo_sy/2-150 ;マップ画像の基点を、メイン画面表示用に合わせて変更(800x600) ;メイン画面を初期化 screen 1,800,600 ;変数 dim map_pos,2 ;バッファの画像を表示する座標用配列。(0がX座標、1がY座標) dim ply_pos,2 ;プレイヤーの位置座標用配列。(0がX座標、1がY座標) ply_pos=ginfo_sx/2,ginfo_sy/2 ;プレイヤーの位置を画面の中央に設定 dim clr,3 ;プレイヤー位置のRGBを取得し、格納するための配列変数(0=R/1=G/2=B) ;メインループ repeat redraw 0 : color : boxf joyGetPosEx joy_stat, 0 ;ジョイスティックの入力を取得 if joy_stat.3<(32511-10000) : map_pos.1+4 ;上 if joy_stat.3>(32511+10000) : map_pos.1-4 ;下 if joy_stat.2<(32511-10000) : map_pos.0+4 ;左 if joy_stat.2>(32511+10000) : map_pos.0-4 ;右 pos map_pos.0,map_pos.1 celput 0,0,2,2,0 ;map_pos座標にマップ画像を2倍サイズで表示 pget ply_pos.0,ply_pos.1 ;プレイヤー座標下のマップ画像色を取得 clr.0=ginfo.16 clr.1=ginfo.17 clr.2=ginfo.18 color 255,255,255 pos ply_pos.0-8,ply_pos.1-8 mes "●" ;プレイヤー(仮) pos 0,0 mes "R"+clr.0+" G"+clr.1+" B"+clr.2 ;取得した色を表示 pos 0,20 ;mes ""+ply_pos.0+" "+ply_pos.1 ;ply_posの内容を表示。この行のコメントを外すとマップ画像が表示されなくなる redraw 1 await 15 loop



この記事に返信する


ZAP

リンク

2014/9/23(Tue) 22:42:05|NO.65188

当方ではコメントを外してもマップは表示されています。
celputをgzoomとかに変えてみても同じですか?



kanahiron

リンク

2014/9/23(Tue) 23:09:56|NO.65191

ごめんなさい 直接は質問に関係ないのですが
HSP3では配列変数の位置は()で囲む記述が推奨されています

例えば、

pos ply_pos.0-8,ply_pos.1-8
この部分は、ply_posの(1-8)番目の要素なのか
(ply_pos.1)-8なのかがぱっと見で判断できません(この場合は確実にマイナスになるのでおかしいとわかりますが)
また、ピリオドで区切る記述方法は式を入れる場合

hogehoge.(cnt*2).(cnt+1)//二次元配列です
と書かなければいけませんが、括弧()で記述すれば

hogehoge(cnt*2,cnt+1)
と書くことができます

本題ですが、自分の環境だとmesを外しても何しても背景が表示されませんでした…
celloadをpicloadに書き換えると表示されました
これは一体どういうことだ…



ラビ

リンク

2014/9/23(Tue) 23:20:33|NO.65193

表示されましたか・・・謎だorz
celput部分を試しに、

gzoom 4096*2,2048*2,0,0,0,4096,2048,0

と変えて見たら、命令を追加しても正常に表示されました。ありがとうございます。

ただ、gzoomではなく、celputを使ったのは、celdivの画像中心座標設定を使いたかったからなんですよね・・・
できればcelputを使いたいけど、gzoomでもなにかしらの方法で代用が効くのかな・・・。

あと、関係があるのかはわかりませんが、自分のPCスペックも軽く書いておきます。

CPU: i7-2600 3.40GHz
メモリ: 16GB
グラボ: NVIDIA GeForce GTX 560 (VRAM 2G)
DIRECTX_VERSION: DirectX 11
OS: Windows 7 Professional 64 ビット



ラビ

リンク

2014/9/23(Tue) 23:29:09|NO.65194

kanahiron様

記述の仕方について助言ありがとうございます。
自分も最初は括弧付きで書いていたのですが、
個人的に見た他の方のソースがドット表記が多く、かつ書きやすそうなので
そちらが主流かと思ってしまいました。
紛らわしい部分もあるので、括弧に戻してみます!



ZAP

リンク

2014/9/24(Wed) 00:13:00|NO.65195

配列変数のドット表記はHSP2時代の名残ですね。
ネット上の古いサンプルだと昔の表記のままのがあるのかもしれません。

中心座標を使いたいのであれば、grotateで代用するのはどうでしょう?
といっても描画先の中心座標ですし、後ろ向きな解決方法ではありますが(^^;

なんとなく環境依存の香りが・・・



ラビ

リンク

2014/9/24(Wed) 00:41:30|NO.65196

ZAP様

grotateは盲点でした。
画像を回転させるだけかと思ってたら、拡大も出来るんですね。
celputが使えない以上、色々試行錯誤してみるしかなさそうですね。
どうもありがとうございました。

一応スレは未解決状態で残して置きます



m

リンク

2014/9/24(Wed) 02:01:41|NO.65197

私の環境ではkanahironさんと同様にmes関係なく表示されなかった?ので適当に試してみたところ、
celloadで読み込むとginfo_sx,syに4096x2048が反映されず初期値(640x480)になっていました。
その影響で中心座標が大きくズレて真っ黒な部分が表示されていた、という感じです。
試しに画像を2048x1024や1024x512に縮小しても上記の現象は改善されず。

celloadの前にそのバッファを予め作成しておくかpicloadで読み込むと正常に表示されました。
画像が正しく読み込めているか、各値が期待した値になっているか等を確認してみるといいかもしれません。

それと質問と直接関係ありませんが、
画像を読み込むバッファにはID0を使用せずID1以降を使用したほうが良いです。



kanahiron

リンク

2014/9/24(Wed) 02:10:58|NO.65198

ginfo_sxではなくginfo_winxを使ったらどうなるのかな…と思いまたソースを実行したのですが…
マップ表示されてるし…
曖昧な表現は好きではないですが、気まぐれなんでしょうか

その間にPCの再起動はしていません(なんか wait 1問題みたい)
HSP3.4RC1
win 8.1 x64



saracena

リンク

2014/9/24(Wed) 08:12:00|NO.65200

HSP3.32bでは表示されました。

HSP3.4RC1ではコメント部分関係なく表示されず、
screenのIDを0、バッファのIDを1にすると表示されました。



ラビ

リンク

2014/9/24(Wed) 08:46:54|NO.65201

m様、kanahiron様
検証ありがとうございます。

こちらでもcelloadを止めて、bufferで初期化後、picloadで読み込むと
正常な動作になり、celputでも問題なく画像が表示されました。
ネックになってたのは、初期化と読み込み周りなのかな・・・?

原因はハッキリしませんが、本来の目的であるcelput表示は達成できたので、
解決済みとします。ありがとうございました。



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