|
|
2012/10/19(Fri) 20:52:37|NO.50073
こんばんは。
今回も質問させていただきます。
よろしく願いします。
左キー(←)を押したときに人(の画像)が
「右足を前に出した画像」→「左足を前に出した画像」→「左を向いて棒立ちの画像」
と変わるようにしたいのですが、どうしたらよいのかが分からず詰まっています。
問題のソースです。
質問の点以外にもいろいろと変なとこがあると思いますがご了承を……
chdir "素材"
celload "player.bmp",1
celdiv 1,20,20,0,0
x=3.0
screen 0,400,100
color 0,0,255
boxf
color 0,0,0
gmode 4,,,256
pos x*20,y*20
gcopy 1,40,0,20,20
pos 0,0
repeat
redraw 2
color 0,0,255
boxf
gosub*a
gosub*b
gosub*c
redraw 1
wait 10
loop
*a
repeat
stick key,15
if key = 1 : w=1 : z=1 : break
if key = 2 : w=2 : y-- : break
if key = 4 : w=3 : x++ : break
if key = 8 : w=0 : y++ : break
await 10
loop
return
*b
if z=2{x-=0.5
z=3
}
if z=1{x-=0.5
z=2
}
return
*c
pos x*20.0,y*20.0
color 0,0,0
gmode 4,,,256
if w=1 and z=1 : celput 1,9
if w=1 and z=2 : celput 1,8
if w=1 and z=3 : celput 1,6
if w=2 : celput 1,3
if w=3 : celput 1,7
if w=0 : celput 1,2
return
|
|
2012/10/20(Sat) 03:07:37|NO.50090
> if key = 1 : w=1 : z=1 : break
ここで左を押されてる間ずっと z=1 にしてるんだから
> if z=1{x-=0.5
> z=2
> }
常にこっちが選択されて
左が押されてる間常にZ=2になってる
他のキャラもアニメーションさせたり動かしたりしたいならNO.50073のじゃ不味い
サブルーチンの*a,*bの内容を修正してみる
*a
stick key,15
w=-1
if key = 1 : w=1 : : break
if key = 2 : w=2 : y-- : break
if key = 4 : w=3 : x++ : break
if key = 8 : w=0 : y++ : break
return
*b
if w=1 {
z++
if z<3 {
x-=0.5
}
}else{
z=0
}
return
*a〜return内のループを取っ払った形
>「右足を前に出した画像」→「左足を前に出した画像」→「左を向いて棒立ちの画像」
2歩進んで停止と解釈して書いたけど・・・
|
|
2012/10/20(Sat) 19:52:03|NO.50106
こんなのはどうでしょうか?
#const cipsize 32
#const Frametotal 8
#const dirtotal 8
#enum wid_main=0
#enum wid_char
tx = "←","←↑","↑","↑→","→","→↓","↓","↓←"
// キャラクタ画像を作成
bgscr wid_char,cipsize*length(tx),cipsize*Frametotal
redraw 0
repeat dirtotal:tgt=tx.cnt:x=cnt*cipsize:l=strlen(tgt)/2
repeat Frametotal
y=cnt*cipsize
color:boxf x,y,x+cipsize-1,y+cipsize-1
color 255,255,255:boxf x+1,y+1,x+cipsize-2,y+cipsize-2
font msGothic,cipsize:color:repeat l:pos x,y:mes strmid(tgt,cnt*2,2):loop
font msGothic,cipsize/3:pos x+2,y+2:mes cnt
loop
loop
redraw
x =0
y =0
// メインウィンドウを初期化
screen wid_main,640,480
gmode 0,cipsize,cipsize
*@
// キーを取得
stick key,0b1111
// キーコードフラグの内の、方向キーの部分のみ切り出す。
dkey = (key&0b1111)
// キャラクタ移動
if(dkey&1){x--}
if(dkey&2){y--}
if(dkey&4){x++}
if(dkey&8){y++}
// 方角決定
if(dkey==0b0001){ rx = cipsize*0
}else:if(dkey==0b0011){ rx = cipsize*1
}else:if(dkey==0b0010){ rx = cipsize*2
}else:if(dkey==0b0110){ rx = cipsize*3
}else:if(dkey==0b0100){ rx = cipsize*4
}else:if(dkey==0b1100){ rx = cipsize*5
}else:if(dkey==0b1000){ rx = cipsize*6
}else:if(dkey==0b1001){ rx = cipsize*7}
// フレームのインクリメント
if(dkey==0){
Frame=0 // 移動していない場合フレームゼロもとい、立ち絵 に 変更。
}else{
if(fIncrement==0){Frame=(Frame+1)\Frametotal/*0からFrametotal-1 の間を繰り返す。*/}
fIncrement=(fIncrement+1)\5
}
// 描画
redraw 0
color 255,255,255:boxf
pos x,y:gcopy wid_char,rx,frame*cipsize
redraw
await 30
goto*@b
| |
|
2012/10/21(Sun) 06:23:26|NO.50114
返信が遅くなってしまい申し訳ございません。
回答ありがとうございます。
>暇人さん
*a
*b
を、教えていただいたソースに変えてみたのですが、画像が表示されません。
これはなぜなのでしょうか?
それとも、そうなるものなのですか?
>ヂオンさん
#const の意味がよくわからないので……
お暇があれば教えてください
よろしくお願いします
|
|
2012/10/21(Sun) 07:15:32|NO.50115
書式は以下の様になります。
#const 名前 値
#const #define 等はプリプロセッサ命令であり、コンパイル時に、スクリプトに記述された『名前』の文字列を、『値』に置き換える動作を行います。
その中でも、#const はスクリプト内で変わることのない 4byte 整数 または 8byte 実数 を指定することが出来、
#const 内で行われた 『名前』を『計算式の解』に置き換えられる特徴を持っています。
例として下のスクリプトをコンパイルすると
#const v1 200+200
mes v1
この様に置き換えられられ
mes@hsp 400
更に、ここから、hsp の命令コードに置き換えられていきます。
もっと詳しく知りたいのなら ヘルプで #const #define 等を検索してみてもいいかもしれません。
# 等のプリプロセッサ命令は、難しそうに見えて、そこまで難しくない場合が多いです。
暇が出来たらチャレンジしてみるのもいいかも。
|
|
2012/10/21(Sun) 10:59:06|NO.50120
>を、教えていただいたソースに変えてみたのですが、画像が表示されません。
w=-1だと表示が実行されないから
修正
*a
key_bak = key
stick key,15
if key = 1 {
w=1
if key_bak = 0 : z=0
}
if key = 2 : w=2 : y--
if key = 4 : w=3 : x++
if key = 8 : w=0 : y++
return
*b
if w=1 {
z=limit(z+1,0,3)
if z<3 {
x-=0.5
}
}else{
z=0
}
return
*c
pos x*20.0,y*20.0
color 0,0,0
gmode 4,,,256
if w=1 and z=1 : celput 1,9
if w=1 and z=2 : celput 1,8
if w=1 and z=3 : celput 1,6
if w=2 : celput 1,3
if w=3 : celput 1,7
if w=0 : celput 1,2
return
左に入れてる間歩き続けてアニメーションを繰り返すなら
*a
stick key,15
if key = 1 : w=1 : z=(z+1)\3 :x-=0.5
if key = 2 : w=2 : y--
if key = 4 : w=3 : x++
if key = 8 : w=0 : y++
return
*b
return
*c
pos x*20.0,y*20.0
color 0,0,0
gmode 4,,,256
if w=1 and z=1 : celput 1,9
if w=1 and z=2 : celput 1,8
if w=1 and z=0 : celput 1,6
if w=2 : celput 1,3
if w=3 : celput 1,7
if w=0 : celput 1,2
return
|
|
2012/10/21(Sun) 14:12:48|NO.50126
>ヂオンさん
私にはまだまだ難しそうです……
でも、いつかはチャレンジしたいと思います。
ありがとうございました。
>暇人
できました!
いろいろなパターンのソースを教えていただきありがとうございます。
やりたいことができて、とても嬉しいです。
この度はどうもありがとうございました。
|
|