|
|
2013/8/29(Thu) 14:22:36|NO.56721
HSP言語で作ったシューティングを横スクロールにしたい。
というわけでマップを配置してそれを右から左に流したいのですが
どうプログラムを書けばいいか見当もつきません。
どうか教えてくださいm(₋ ₋)m
|
|
2013/8/29(Thu) 14:28:00|NO.56722
|
|
2013/8/29(Thu) 14:32:17|NO.56723
普通のマップチップならそのサイトを参考にすればできるわけなのですから、どのようにできなかったのかを説明して頂けると解決につながると思います。
|
|
2013/8/29(Thu) 14:34:15|NO.56724
はい
まずわかっててもらいらいのは
ぼくはRPGではなくシューティングを作っているということです。
またマップチップは自作しました
|
|
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
です
マップチップが表示されるはずの部分が白くなってしまいます
| |
|
2013/8/29(Thu) 17:58:16|NO.56728
*MAPN
buffer 7
↑
ここ
|
|
2013/8/29(Thu) 20:09:05|NO.56733
のどこがいけないのでしょうか?
|
|
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
具体的にどういうことでしょうか?
|
|
2013/8/29(Thu) 22:01:19|NO.56739
あらら。
別スレッドで使うのもあまり良くはないですが、
流石に1スレッドだけで名前2つ使うのはやめましょうよ…
あと、既に
buffer 7
↑
ココ
と123さんに書かれていて、
私がスクリーンにするなり消すなりしてみてはといってもそれすらしない。
それじゃあダメですよ。
buffer 7が問題なのは分かっているのですから、自分でやってください。
もっと言えば私が書いた方法のどちらかが答えに直結していますので。
自分で言った様に知識が有るんでしょう?
|
|
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
どうすればいいでしょうか?
| |
|
2013/8/30(Fri) 13:02:42|NO.56755
せめて何行目で、どんなエラーが出るのかくらい書こうぜ。
|
|
2013/8/30(Fri) 13:25:55|NO.56756
できました
ありがとうございます
みなさま
|
|