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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
1019
TA歩行アニメーションっぽいのを実現したい6解決


TA

リンク

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



TA

リンク

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



TA

リンク

2012/10/21(Sun) 14:12:48|NO.50126

>ヂオンさん

私にはまだまだ難しそうです……
でも、いつかはチャレンジしたいと思います。
ありがとうございました。



>暇人
できました!
いろいろなパターンのソースを教えていただきありがとうございます。
やりたいことができて、とても嬉しいです。
この度はどうもありがとうございました。



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