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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0829
ドナルド横スクロールシューティングの地形15解決


ドナルド

リンク

2013/8/29(Thu) 14:22:36|NO.56721

HSP言語で作ったシューティングを横スクロールにしたい。

というわけでマップを配置してそれを右から左に流したいのですが
どうプログラムを書けばいいか見当もつきません。

どうか教えてくださいm(₋ ₋)m



この記事に返信する


ドナルド

リンク

2013/8/29(Thu) 14:28:00|NO.56722


http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1169200201
のサイトを参考にしましたが自分のまぷちっぷではできませんでした



test

リンク

2013/8/29(Thu) 14:32:17|NO.56723

普通のマップチップならそのサイトを参考にすればできるわけなのですから、どのようにできなかったのかを説明して頂けると解決につながると思います。



ドナルド

リンク

2013/8/29(Thu) 14:34:15|NO.56724

はい
まずわかっててもらいらいのは
ぼくはRPGではなくシューティングを作っているということです。
またマップチップは自作しました



test

リンク

2013/8/29(Thu) 14:43:38|NO.56725

RPGでもシューティングでもマップチップは同じ方法でできますので、そこの心配は必要ありません。

マップチップが自作ということはつまり画像ですね。参考のサイトでは、
> 1つ目の処理は、マップチップの読込。
> ここではチップ画像をboxfによる塗り潰しで表現。
> 0番目のチップは土、1番目は草原、2番目は海と仮定。
とあるので、ほんとうはマップチップを読みこむ処理のところで、画像がなくても動作するように代わりにboxfを使ってマップチップ用の画像を作ったということです。
ですから、boxfでマップチップを作る代わりにそこに画像を読みこめばできます。



ななっしー

リンク

2013/8/29(Thu) 14:46:10|NO.56726

とりあえず自分で書いたスクリプトを載せてみてはどうでしょう?
自作のマップチップでできないと言われても、何ができていないのか、何が分からないのかが分かりません。



ドナルド

リンク

2013/8/29(Thu) 15:03:00|NO.56727


;///画像読み込み/// buffer 1 :picload "heri.gif" ;自キャラ画像読み込み buffer 2 :picload "tama.gif" ;弾画像読み込み buffer 5 :picload "haikei.jpg" ;背景画像読み込み buffer 7 :pos 0,0 :picload "map1.gif" buffer 7 :pos 0,16 :picload "map2.gif" buffer 7 :pos 0,32 :picload "map3.gif" buffer 7 :pos 0,48 :picload "map4.gif" buffer 7 :pos 0,54 :picload "map5.gif" buffer 7 :pos 0,80 :picload "map6.gif" buffer 7 :pos 0,96 :picload "map7.gif" buffer 7 :pos 0,112 :picload "map8.gif" screen 0,1350,800 ;画面サイズを1350× 800に変更 MX=240:MY=160 ;自キャラの初期位置 randomize ;使うかどうかわからないけど乱数初期化 cls 4 ;画面の色を黒に設定 TAMA=0 KY=0 stick KY,31 dim SX,10 :dim SY,10 :dim TAMA,10 width 1350, 800,0,0 ;///メインループ/// *hazimenomae color 255,255,255 pos 255,255 mes "スタート" repeat stick KY,31 if (KY&16)=16 :gosub *hazime await 10 loop *hazime stick KY,31 redraw 0 ;書き換え停止 pos 271,0 :gcopy 5,10,10,1350,800 ;背景表示 pos 0,0 :gcopy 5,10,10,350,800 ;余白を背景の左端の部分で埋める repeat 10 gosub *SHOT loop gosub *MAPN ;//自キャラの移動// if (KY&1)=1 :MX=MX-8 :if MX<0 :MX=0 ;自キャラの左移動判定 if (KY&4)=4 :MX=MX+8 :if MX>1280 :MX=1280 ;自キャラの右移動判定 if (KY&2)=2 :MY=MY-8:if MY<0 :MY=0 ;自キャラの上移動判定 if (KY&8)=8 :MY=MY+8 :if MY>799 :MY=799 ;自キャラの下移動判定 pos MX,MY ;自キャラの位置決定 gmode 2 ;gmodeの位置修正 gcopy 1,0,0,80,50 ;自キャラコピー redraw 1 ;画面書き換え await 1 goto *hazime ;//弾発射// *SHOT if (KY&16)!=0 & TAMA(cnt)=0 { ;スペースキー判定 TAMA(cnt)=1 TX(cnt)=MX+24 TY(cnt)=MY+12 RENSYA=20 } if TAMA(cnt)=1 { TX(cnt)=TX(cnt)+30 color 0,255,255 :boxf TX(cnt),TY(cnt),TX(cnt)+18,TY(cnt)+4 if TX(cnt)>1349 :TAMA(cnt)=0 } if RENSYA>0 :RENSYA=RENSYA-1 return ;//マップ// ; マップチップ作成 *MAPN buffer 7 ; マップ定義 sdim map, 16 * 12 + 1 ; 横幅×縦幅+1サイズ分を確保 map = "2222222222222222" map+= "2222222200222222" map+= "2222220000022222" map+= "2222000111000222" map+= "2220011111100222" map+= "2220011111000022" map+= "2222001110000222" map+= "0220001100022222" map+= "0000000110000222" map+= "0002200000000222" map+= "1000222000022222" map+= "1100022222222222" ; マップ描画 gsel 0 redraw 0 repeat 12 y = cnt repeat 16 x = cnt tip = int(strmid(map, y * 16 + x, 1)) pos x * 16, y * 16 gcopy 7, tip * 16, 0, 16, 16 loop loop redraw 1 return
です
マップチップが表示されるはずの部分が白くなってしまいます



123

リンク

2013/8/29(Thu) 17:58:16|NO.56728

*MAPN
buffer 7

ここ



ドナルド

リンク

2013/8/29(Thu) 20:09:05|NO.56733

のどこがいけないのでしょうか?



流星群/poteto0413

リンク

2013/8/29(Thu) 21:13:12|NO.56735

それもですが

buffer 7 :pos 0,0 :picload "map1.gif" buffer 7 :pos 0,16 :picload "map2.gif" buffer 7 :pos 0,32 :picload "map3.gif" buffer 7 :pos 0,48 :picload "map4.gif" buffer 7 :pos 0,54 :picload "map5.gif" buffer 7 :pos 0,80 :picload "map6.gif" buffer 7 :pos 0,96 :picload "map7.gif" buffer 7 :pos 0,112 :picload "map8.gif"
これも気になりますね…
pos 0,0前のbuffer 7一度だけで良いと思うのですが(^^;)

あと、教えてもらうばかりではなく、
問題となるところを書いてもらえているのですから、
bufferなら一度screenに変えて、どうなっているか見てみる。
問題が有るようならその行をコメントアウトする。
などをしてみてはいかがでしょうか?



火狐

リンク

2013/8/29(Thu) 21:52:05|NO.56738

具体的にどういうことでしょうか?



流星群/poteto0413

リンク

2013/8/29(Thu) 22:01:19|NO.56739

あらら。
別スレッドで使うのもあまり良くはないですが、
流石に1スレッドだけで名前2つ使うのはやめましょうよ…

あと、既に
buffer 7

ココ
と123さんに書かれていて、
私がスクリーンにするなり消すなりしてみてはといってもそれすらしない。
それじゃあダメですよ。
buffer 7が問題なのは分かっているのですから、自分でやってください。
もっと言えば私が書いた方法のどちらかが答えに直結していますので。

自分で言った様に知識が有るんでしょう?



check

リンク

2013/8/30(Fri) 02:02:05|NO.56745

buffer 7 :pos 0,0 :picload "map1.gif"
buffer 7 :pos 0,16 :picload "map2.gif"
buffer 7 :pos 0,32 :picload "map3.gif"
buffer 7 :pos 0,48 :picload "map4.gif"
buffer 7 :pos 0,54 :picload "map5.gif"
buffer 7 :pos 0,80 :picload "map6.gif"
buffer 7 :pos 0,96 :picload "map7.gif"
buffer 7 :pos 0,112 :picload "map8.gif"



buffer 7 pos 0,0 :picload "map1.gif", 1 pos 0,16 :picload "map2.gif", 1 pos 0,32 :picload "map3.gif", 1 pos 0,48 :picload "map4.gif", 1 pos 0,54 :picload "map5.gif", 1 pos 0,80 :picload "map6.gif", 1 pos 0,96 :picload "map7.gif", 1 pos 0,112 :picload "map8.gif", 1
に書き換えれば(よくスクリプトを見ていないが)多分動く。
駄目だったらマップチップを1枚の画像にまとめよう。

縦スクロールのSTGが作れるのであれば、
横スクロールのSTGを作ることもさして難しくはないと思うのだが。



火狐

リンク

2013/8/30(Fri) 12:51:23|NO.56753

なんとかスクリプトはかけたのですがエラーがおきます

buffer 1 :picload "heri.gif" ;自キャラ画像読み込み buffer 2 :picload "tama.gif" ;弾画像読み込み buffer 5 :picload "haikei.jpg" ;背景画像読み込み buffer 7 :picload "map1.gif" buffer 7 :picload "map2.gif" buffer 7 :picload "map3.gif" buffer 7 :picload "map4.gif" buffer 7 :picload "map5.gif" buffer 7 :picload "map6.gif" buffer 7 :picload "map7.gif" buffer 7 :picload "map8.gif" screen 0,1350,800 ;画面サイズを1350× 800に変更 MX=240:MY=160 ;自キャラの初期位置 randomize ;使うかどうかわからないけど乱数初期化 cls 4 ;画面の色を黒に設定 TAMA=0 KY=0 stick KY,31 dim SX,10 :dim SY,10 :dim TAMA,10 width 1350, 800,0,0 WORLDX=-1350 ;///メインループ/// *hazimenomae color 255,255,255 pos 255,255 mes "スタート" repeat stick KY,31 if (KY&16)=16 :gosub *hazime await 10 loop *hazime stick KY,31 redraw 0 ;書き換え停止 pos 271,0 :gcopy 5,10,10,1350,800 ;背景表示 pos 0,0 :gcopy 5,10,10,350,800 ;余白を背景の左端の部分で埋める repeat 1 gosub *SHOT loop MPSHIFT=WORLDX\16 MPSTART=WORLDX/16 gosub *MAPN ;//自キャラの移動// if (KY&1)=1 :MX=MX-8 :if MX<0 :MX=0 ;自キャラの左移動判定 if (KY&4)=4 :MX=MX+8 :if MX>1280 :MX=1280 ;自キャラの右移動判定 if (KY&2)=2 :MY=MY-8:if MY<0 :MY=0 ;自キャラの上移動判定 if (KY&8)=8 :MY=MY+8 :if MY>799 :MY=799 ;自キャラの下移動判定 pos MX,MY ;自キャラの位置決定 gmode 2 ;gmodeの位置修正 gcopy 1,0,0,80,50 ;自キャラコピー redraw 1 ;画面書き換え await 1 goto *hazime ;//弾発射// *SHOT if (KY&16)!=0 & TAMA(cnt)=0 { ;スペースキー判定 TAMA(cnt)=1 TX(cnt)=MX+24 TY(cnt)=MY+12 RENSYA=20 } if TAMA(cnt)=1 { TX(cnt)=TX(cnt)+30 color 0,255,255 :boxf TX(cnt),TY(cnt),TX(cnt)+18,TY(cnt)+4 if TX(cnt)>1349 :TAMA(cnt)=0 } if RENSYA>0 :RENSYA=RENSYA-1 return ;//マップ// *MAPN repeat 20 RCNT=cnt repeat 31 if MAOSTART=-30+cnt<0 :continue C=peek(MAPS,RCNT*MAPLENG+MPSTART-30+cnt) return if (C>"0") and (C<"A"){ pos cnt*16-MPSHIFT,RCNT*16 gcopy 7,(C-"1")*16,0,16,16 } loop loop return
どうすればいいでしょうか?



check

リンク

2013/8/30(Fri) 13:02:42|NO.56755

せめて何行目で、どんなエラーが出るのかくらい書こうぜ。



火狐

リンク

2013/8/30(Fri) 13:25:55|NO.56756

できました
ありがとうございます
みなさま



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