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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0402
いつき画像のアニメーション12解決


いつき

リンク

2011/4/2(Sat) 14:18:09|NO.38066

HSP初心者のいつきといいます。

アニメーションさせる為に
2つの画像を1つにし、celdiv等を使って、
2つの画像を交互にアニメーションさせたいのですが、
画像ファイル(100*100)

celload "画像ファイル",1
celdiv 1,50,100
repeat
redraw 0
boxf
pos 0,0
celput 1,0,1.0,1.0
redraw 1
wait 10
redraw 1
loop

変化するのはcelputの読み出しID部分になると思いますが、
ID「0」と「1」を交互にリピートする方法が思いつかず困っています。
どうする方法が一番よいでしょうか・・・?



この記事に返信する


晩御飯

リンク

2011/4/2(Sat) 14:23:00|NO.38067

ただし0と1限定。

id = -id + 1;



Cookies

リンク

2011/4/2(Sat) 14:23:09|NO.38068

ループごとに0と1を交互にしたいということですか?
2で割ったあまりはどうでしょうか。

cnt\2



Cookies

リンク

2011/4/2(Sat) 14:24:25|NO.38069

1とのXORでもよいです。

ID ^= 1
^はXOR記号、IDが1のときは0,
IDが0のときは1です。



ひらまる

リンク

2011/4/2(Sat) 14:29:37|NO.38070

\は割ったあまりを求める演算子ですね。
mes ( 10 \ 3 )や、mes ( 1 \ 5 )などとしてみると理解できると思います。

Cookiesさんの方法は、IDが増えても使えますね。
『カウンタ \ ID最大数』 が現在のIDになります。
また、アニメーションの速度を変化させる場合は、
『カウンタ * 表示時間 \ ID最大数』ということもできます。



いつき

リンク

2011/4/2(Sat) 14:45:05|NO.38071

すばやい回答ありがとうございます。
Cookiesさんの方法(cnt\2)を試してみまして、
思い通りの動作が出来ました。
ありがとうございました。

>晩御飯さん
参考になります。ありがとうございます。

>ひらまるさん
IDが増えた際の参考したいと思います。
ありがとうございます。



いつき

リンク

2011/4/7(Thu) 07:11:15|NO.38197

すいません。解決済にしていますが、内容が同じなので・・・

0と1の交互、及び画像が増えた際の対応も理解できました。
しかし、複数の画像を用意した際のIDを「010101」や「012012」等
順番に行うのでは無く、「232323」や「454545」等の動作にする場合は
どうしたらいいでしょうか?
開始cntを2や4にすれば、開始位置だけは変えられますが・・・。

すみませんがよろしくお願いいたします。



hexa.hemi

リンク

2011/4/7(Thu) 08:34:19|NO.38198


ID++ ID \= 2//IDは010101になる celput ID + 2, 0, 1.0, 1.0// ID + 2をしているため232323になる。343434にする場合はID + 3



SYAM

リンク

2011/4/7(Thu) 09:39:17|NO.38200

ループ一回分のパターンを配列変数に代入しておいて、
その配列を先頭から参照すれば OKです。
どんな複雑なパターンでも簡単にできますね。

配列を二次元にする+一ループのコマ数も配列にする
なんてことをすると、色んなパターンを簡単に切替えるなんていう夢がひろがります。



SYAM

リンク

2011/4/7(Thu) 10:47:43|NO.38201

広がった例.


;celload "画像ファイル",1 buffer 1,160,16 repeat 16:pos cnt*16,0:mes strf("%02d",cnt):loop celdiv 1,16,16 dim frames,3 dim motion,10,3 frames = 10,10,5 motion(0, 0) = 0,1,2,3,4,5,6,7,8,9 motion(0, 1) = 9,8,7,6,5,4,3,2,1,0 motion(0, 2) = 0,2,4,6,8 ptn=0 screen 0,100,100 repeat redraw 0 boxf pos 0,0 celput 1, motion(i,ptn) ,1.0,1.0 i=(i+1)\frames(ptn) wait 10 stick s if(s):ptn=(ptn+1)\3:i=0 redraw 1 loop



いつき

リンク

2011/4/7(Thu) 21:04:41|NO.38220

回答ありがとうございます。
SYAMさんの配列変数を利用した方法を覚えようと、
ソースをコピーして色々自分なりに解析を試みていました。
理解してから返答しようと思いましたが、時間がかかりそうなので
お礼を先に書くことにしました。

>hexa.hemiさん
ありがとうございます。
単純に結果に足せばいいわけですよね・・・。
何だか恥ずかしいです・・・。

>SYAMさん
ありがとうございます。
今後の為にも配列変数を使用した方法も
理解しておく必要があるので、がんばって覚えます。

一先ず現在の処理はhexa.hemiさんの方法で進行してみます。
お二人ともありがとうございました。



SYAM

リンク

2011/4/7(Thu) 21:32:10|NO.38223

ぁぁぁぁぁ。そういえば説明とかコメントくらい書いておくべきでしたね。
サンプルは、10コマ、10コマ、5コマの3パターンのアニメができるものです。

frames 配列は、各パターンが何コマの画像からなるアニメであるかを表します。


motion 配列は、各コマが何番目の画像であるかを表します。
      1つめの添え字でアニメーションの先頭からのコマ数、
      2つめの添え字でどのパターンのアニメーションであるかを指定します。
変数 i は、現在表示しているのが何コマ目であるかを表します。
変数ptn は、現在再生中のアニメーションがどのパターンであるかを表します。

なので、motion(i,ptn)は、現在再生中のアニメの、現在表示中のコマが、何番目の画像であるかを表していることになります。


…今回は利用しないとのことではありますが、理解の助けになれば幸いです。



いつき

リンク

2011/4/7(Thu) 21:58:37|NO.38231

>SYAMさん
わざわざありがとうございます。
とても助かります。
正直言うと聞こうか迷っていました(笑)



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