コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
名無し ◆oC7uT4R3Za7F
2017/12/10 11:18
情報交換
spanimについて
ループ前に、spのアニメーションを設定したんですけど、ループの中で、spchrを使って、定義番号を変えてまた命令を使ったら元の番号に戻したとspanimが適用されません。どうすれば改善できるのでしょうか。

コメント

アバター
あまさとしおん 2017/12/10 12:51 ◆mzDKTVUAtwqE
SPCHRのあとにSPANIMを実行するように改良する

※SPANIMは同系統の命令で上書きされます
例:SPANIMの"XY"ならSPOFSで上書きされる
アバター
あまさとしおん 2017/12/10 12:53 ◆mzDKTVUAtwqE
っと思ったけど「定義番号を変えてまた命令を使ったら元の番号に戻したとspanimが適用されません」って何だ

今のプログラムが全く想像できないのです
コード載せたほうが早い感じだ
アバター
名無し 2017/12/10 13:17 ◆oC7uT4R3Za7F
acls
spseto,o
f=4:spset 0,b
spanim 0,"i" ,f,b,f,b+1,f,b+2,f,b+1,0
spofs 0,100,100
while 1
b=button()
if b and #right then x=x+1.5
if b and #left then x=x-1.5

if b and #a then gosub @1

spofs 0,x,y
vsync
wend

@1
spchr 0,1
beep 3
spchr 0,0
vsync2
return

上のようなプログラムです。小文字で読みにくくてすみません。
アバター
あまさとしおん 2017/12/10 14:31 ◆mzDKTVUAtwqE
@1からRETURNのところ
の趣旨が分からない

何をするためにそうなったのか
アバター
名無し 2017/12/10 14:38 ◆oC7uT4R3Za7F
ここには、書いていないんですけど、後からスプライト0の定義番号を取得して当たり判定をつけるために、変えたということです。後、なぜgosubにしたかというのは、ループ中のvsyncの数値をいじりたくなかったからです。説明下手ですみません。
アバター
Villit 2017/12/10 15:00 ◆vHS9PZuQvtOx
方法はいろいろあってどれがスマートかは分からないのですが、
とりあえず自分が思いついた改善策を。

・別のスプライトをSPLINKで上に重ねて、重ねた方のスプライトでSPCHRをする
これならSPCHRでSPANIMが止まってしまうのを回避できます。

・SPANIMの処理をSPCHRで代用する
ループ内に時間経過で変わるアニメーション用変数を定義して、その変数を基準にSPCHRします。
今回f=4となっているので、4フレームごとに0→1→2→1→…で中身が変化する変数を作ればOKです。
アバター
名無し 2017/12/10 15:02 ◆oC7uT4R3Za7F
Villitさんコメントありがとうございます。ためしてみます。
アバター
Villit 2017/12/10 15:02 ◆vHS9PZuQvtOx
ただ、透明色が含まれていて後ろが透けて見えてしまうスプライトの場合、SPLINKで重ねる方法は普通には使えません。
後ろに来るスプライトを一瞬だけSPCOLORで透明にする、などの一工夫が必要です。
アバター
あきと 2017/12/10 17:06 ◆7TEpcjb/rk2E
問題の根本はSPCHRを使うとSPANIMの”I”アニメは止まってしまうという事ですね。
定義番号で当たり判定をしたいというのは攻撃モーションのような事がしたいのだと思います。

私のオススメはSPCHRでやっていることもSPANIMで書くことです。
通常アニメはループ再生、Aボタン後のアニメは1回で終了するようにしておいてSPCHK命令でアニメ終了を検出したら元のアニメに戻るようにします。
アバター
あきと 2017/12/10 17:12 ◆7TEpcjb/rk2E
一応疑似コード
------
SPSET 0,0
WHILE 1
 CH=SPCHK(0)
 IF (CH AND #CHKI)==0 THEN ループアニメ
 IF BUTTON(2) THEN 一回再生アニメ
 VSYNC
WEND
アバター
名無し 2017/12/10 17:25 ◆oC7uT4R3Za7F
あきとさんコメントありがとうございます。攻撃モーション…その通りです。
アバター
名無し 2017/12/10 17:56 ◆oC7uT4R3Za7F
f=0:A=0
SPSET 0,A
WHILE 1
 CH=SPCHK(0)
 IF (CH AND #CHKI)==0 THEN
 SPANIM 0, "I", F , B , F , B+1 ,F , B+2, F , B+1,0
 ENDIF
VSYNC
WEND
でやってるんですが、spanimのところで、エラーになってしまいます。何がいけないのでしょうか。
アバター
あきと 2017/12/10 18:18 ◆7TEpcjb/rk2E
SPANIMの所でエラーとの事ですが、おかしいところは無いように見えます。
Fが0だからでしょうか。試しに本当の数字を入れてみてはどうでしょう。
0,”I”,16,0,16,1,16,2,16,1,0
のように。
私は上のコードは動作確認しています。(アニメの所は数値を入れましたが)
アバター
名無し 2017/12/10 18:23 ◆oC7uT4R3Za7F
あきとさん有難うございます。無事解決出来ました。

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -