スプライト(質問掲示板)
投稿: ugonight
投稿:2011/09/11 10:06:11(最新:2011/09/20 22:08:20)
画像のスプライトで画像をアニメーションしながら回転させたり拡大させたり動きまわったりという動きを素早く気持ち悪くやりたいのですが、使い方がよくわからないので、なるべく奇妙な使い方を教えてくださいort
ツイート
コメントする
コメントするには、ログインする必要があります。
コメント一覧
上位互換、というわけではありません。
・showImagePosition関数
画像ファイル番号を指定して、表示位置を変更します。
同時に画像IDを生成します。
この画像IDは
hideImagePosition関数による表示OFF
などに使用できます。
・setSpritePosition関数
予め準備しておいた
画像スプライトIDを指定して、表示位置を変更します。
準備の手間はかかりますが
一度生成した画像スプライトIDは
setSpriteRotation関数による回転、
setSpriteScale関数による拡大
などにも利用できます。
回転や拡大を見越して
画像スプライトIDを生成する方法で準備したのに、
表示位置の設定で、showImagePosition関数を使用すると
折角、準備した画像スプライトIDを利用しないで、
新たに別の画像IDを生成してしまいます。
この生成された別の画像IDは、
回転や拡大に利用できないので、もったいない
というわけです。
・showImagePosition関数
画像ファイル番号を指定して、表示位置を変更します。
同時に画像IDを生成します。
この画像IDは
hideImagePosition関数による表示OFF
などに使用できます。
・setSpritePosition関数
予め準備しておいた
画像スプライトIDを指定して、表示位置を変更します。
準備の手間はかかりますが
一度生成した画像スプライトIDは
setSpriteRotation関数による回転、
setSpriteScale関数による拡大
などにも利用できます。
回転や拡大を見越して
画像スプライトIDを生成する方法で準備したのに、
表示位置の設定で、showImagePosition関数を使用すると
折角、準備した画像スプライトIDを利用しないで、
新たに別の画像IDを生成してしまいます。
この生成された別の画像IDは、
回転や拡大に利用できないので、もったいない
というわけです。
おかげさまで、ゾンビはできました!
それで、ブレイクイーターなんですが…☟
上から真ん中に落ちてく感じにしたいんですが…
のとこでえらってしまいます。どこがダメなんでしょうか…1?
それで、ブレイクイーターなんですが…☟
deleteAllSprite() waitTime(2000) playSound(86739) bx=256 by=0 while by = 192 hideImageAllWithoutBG() showImagePosition(bx, by, 86731) waitTime(10) by = by+1 end
上から真ん中に落ちてく感じにしたいんですが…
while by = 192
のとこでえらってしまいます。どこがダメなんでしょうか…1?
……。
というように、1000回はくしゅってくれるようにしたんですけど…
移動とか回転とかはどんなタイミングでやったらいいですかね…
while文の中に書かなきゃいけなくてでもアニメーションさせながら移動しているわけでしかも5枚のスプライトが一度に…
ちょっと教えてくださいort
#画像スプライト deleteAllSprite() #最初に使う前にキャンバスをキレイにしておく drawCanvas() setCanvasVisible(true) #準備 x =0 y =0 w =150 h =150 xx=0 yy=0 ww=150 hh=150 img_id_01 = createSprite(84357) setSpriteRect(img_id_01, x,y,w,h, xx,yy,ww,hh) img_id_02 = createSprite(84364) setSpriteRect(img_id_02, x,y,w,h, xx,yy,ww,hh) img_id_03 = createSprite(84371) setSpriteRect(img_id_03, x,y,w,h, xx,yy,ww,hh) img_id_04 = createSprite(84378) setSpriteRect(img_id_04, x,y,w,h, xx,yy,ww,hh) img_id_05 = createSprite(84385) setSpriteRect(img_id_05, x,y,w,h, xx,yy,ww,hh) #表示する座標の設定 soto_x = -200 soto_y = -200 naka_x = 0 naka_y = 0 #まずは、すべての画像を画面外に表示 setSpritePosition(img_id_01, soto_x, soto_y) setSpritePosition(img_id_02, soto_x, soto_y) setSpritePosition(img_id_03, soto_x, soto_y) setSpritePosition(img_id_04, soto_x, soto_y) setSpritePosition(img_id_05, soto_x, soto_y) b = 0 while b < 1000 #アニメーションさせる a = 0 while a < 5 view_id = "" #アニメーションで表示する画像のID hide_id = "" #アニメーションで隠す画像のID #それぞれのIDをセットする case a when 0 view_id = img_id_01 hide_id = img_id_05 when 1 view_id = img_id_02 hide_id = img_id_01 when 2 view_id = img_id_03 hide_id = img_id_02 when 3 view_id = img_id_04 hide_id = img_id_03 when 4 view_id = img_id_05 hide_id = img_id_04 end #セットされたIDをもとに、座標を決定する setSpritePosition(view_id, naka_x, naka_y) setSpritePosition(hide_id, soto_x, soto_y) drawCanvas() a = a + 1 waitTime(100) end b = b + 1 end
というように、1000回はくしゅってくれるようにしたんですけど…
移動とか回転とかはどんなタイミングでやったらいいですかね…
while文の中に書かなきゃいけなくてでもアニメーションさせながら移動しているわけでしかも5枚のスプライトが一度に…
ちょっと教えてくださいort
わざわざ試してくれたんですねぇ~ありがとうございます!
うぅ…せっかく感動的なゾンビが出てくると思ったのに…
一応イベントのコードです
画像9404っていうのは黒い画面でこれじゃないかとにらんだのですが…でも前やった時には普通に表示されてました…
うぅ…せっかく感動的なゾンビが出てくると思ったのに…
一応イベントのコードです
speak("椅子の下に何やら装置が!!") speak("パスワードを入力してください") deleteAllSprite() deleteTextAll() drawCanvas() hideImage() speak("キーボードで入力してください。") pasu = createArray() pasu[0] = "251" #パスワード1 pass = 1 #パスワードの数 keta = 3 #パスワードの桁数 su = 0 #何文字目かを表す変数 #ここから下はキーボードのキーの設定 k = createArray() k[0] = "0";k[1] = "1";k[2] = "2";k[3] = "3";k[4] = "4"k[5] = "5";k[6] = "6";k[7] = "7";k[8] = "8";k[9] = "9"k[10] = "Q";k[11] = "W";k[12] = "E";k[13] = "R"k[14] = "T";k[15] = "Y";k[16] = "U";k[17] = "I";k[18] = "O";k[19] = "P";k[20] = "A";k[21] = "S";k[22] = "D";k[23] = "F";k[24] = "G";k[25] = "H";k[26] = "J";k[27] = "K";k[28] = "L";k[29] = "Z";k[30] = "X";k[31] = "C";k[32] = "V";k[33] = "B";k[34] = "N";k[35] = "M" #キーの設定ここまで #↓入力箇所の表示 t = createText(250, 250, 400, 200) ki = createArray() i = 0 while i < keta ki[i] = "-" i = i + 1 end setText(t, ki,"\nキーボードで入力してください。") startInput() loop = true#ループの開始 while loop if hasInput() takeInput() i = 0 while i < 36 #すべてのキーを調べる if isKeyDown(k[i]) ki[su] = k[i] su = su + 1 setText(t, ki,"\nキーボードで入力してください。") if su == keta loop = false end end i = i + 1 end end waitTime(10) end endInput() deleteTextAll() #表示を消す #↓入力をひとつの変数に入れる p = "" i = 0 while i < keta p = p + ki[i] i = i + 1 end i = 0 answer = false while i < pass if p == pasu[i] if i == 0 #パスワード1に合っていたときの処理 playSound(84277) speak("???「正解でぇ~す」") speak("???「では、準備をしますので今しばらくお待ちください」") showLeftImage(47864) speak("好太郎「ん…? 準備…? どういうことだ…」") fadeOutMusicFadeIn(1000, 82229, 1000) waitTime(2000) hideLeftImage() showLeftImage(47879) speak("好太郎「ま…また…!?」") hideLeftImage() waitTime(1000) showImage(9404) playSound(82230) waitTime(100) hideImage() waitTime(3000) showImage(9404) playSound(82230) waitTime(100) hideImage() waitTime(2000) showImage(9404) playSound(82230) waitTime(100) hideImage() playSound(84351) waitTime(2000) showImage(9404) playSound(82230) waitTime(100) hideImage() waitTime(2000) showImage(9404) playSound(82230) waitTime(100) hideImage() waitTime(1000) showImage(9404) playSound(82230) waitTime(100) hideImage() waitTime(1000) showImage(9404) playSound(82230) waitTime(100) hideImage() waitTime(2000) playSound(82231) fadeOut(0, 0, 0) fadeOutMusicStop(2000) waitTime(3000) showImage(9404) playSound(84356) #画像スプライト deleteAllSprite() #最初に使う前にキャンバスをキレイにしておく drawCanvas() setCanvasVisible(true) #準備 x =0 y =0 w =150 h =150 xx=0 yy=0 ww=150 hh=150 img_id_01 = createSprite(84357) setSpriteRect(img_id_01, x,y,w,h, xx,yy,ww,hh) img_id_02 = createSprite(84364) setSpriteRect(img_id_02, x,y,w,h, xx,yy,ww,hh) img_id_03 = createSprite(84371) setSpriteRect(img_id_03, x,y,w,h, xx,yy,ww,hh) img_id_04 = createSprite(84378) setSpriteRect(img_id_04, x,y,w,h, xx,yy,ww,hh) img_id_05 = createSprite(84385) setSpriteRect(img_id_05, x,y,w,h, xx,yy,ww,hh) #表示する座標の設定 soto_x = -200 soto_y = -200 naka_x = 0 naka_y = 0 #まずは、すべての画像を画面外に表示 setSpritePosition(img_id_01, soto_x, soto_y) setSpritePosition(img_id_02, soto_x, soto_y) setSpritePosition(img_id_03, soto_x, soto_y) setSpritePosition(img_id_04, soto_x, soto_y) setSpritePosition(img_id_05, soto_x, soto_y) #アニメーションさせる i = 0 while i < 5 view_id = "" #アニメーションで表示する画像のID hide_id = "" #アニメーションで隠す画像のID #それぞれのIDをセットする case i when 0 view_id = img_id_01 hide_id = img_id_05 when 1 view_id = img_id_02 hide_id = img_id_01 when 2 view_id = img_id_03 hide_id = img_id_02 when 3 view_id = img_id_04 hide_id = img_id_03 when 4 view_id = img_id_05 hide_id = img_id_04 end #セットされたIDをもとに、座標を決定する setSpritePosition(view_id, naka_x, naka_y) setSpritePosition(hide_id, soto_x, soto_y) drawCanvas() i = i + 1 waitTime(100) end end end end if !answer speak("パスワードが違います。\n入力:",p) end
画像9404っていうのは黒い画面でこれじゃないかとにらんだのですが…でも前やった時には普通に表示されてました…
惜しいです(w
1枚ずつ別の画像の場合は、
「createSprite」~「setSpriteRect」までが準備のセットです。
なぜなら、ここまではアニメーション中も
変化が起きない固定の値だからです。
while文の中に必要なのは、
画面上に描画する位置を設定する
「setSpritePosition」
1枚ずつ、表示する位置を
画面内、画面外と変更してあげることで
アニメーションを表示します。
1枚ずつ別の画像の場合は、
「createSprite」~「setSpriteRect」までが準備のセットです。
なぜなら、ここまではアニメーション中も
変化が起きない固定の値だからです。
while文の中に必要なのは、
画面上に描画する位置を設定する
「setSpritePosition」
1枚ずつ、表示する位置を
画面内、画面外と変更してあげることで
アニメーションを表示します。
#画像スプライト deleteAllSprite() #最初に使う前にキャンバスをキレイにしておく drawCanvas() setCanvasVisible(true) #準備 x =0 y =0 w =150 h =150 xx=0 yy=0 ww=150 hh=150 img_id_01 = createSprite(84357) setSpriteRect(img_id_01, x,y,w,h, xx,yy,ww,hh) img_id_02 = createSprite(84364) setSpriteRect(img_id_02, x,y,w,h, xx,yy,ww,hh) img_id_03 = createSprite(84371) setSpriteRect(img_id_03, x,y,w,h, xx,yy,ww,hh) img_id_04 = createSprite(84378) setSpriteRect(img_id_04, x,y,w,h, xx,yy,ww,hh) img_id_05 = createSprite(84385) setSpriteRect(img_id_05, x,y,w,h, xx,yy,ww,hh) #表示する座標の設定 soto_x = -200 soto_y = -200 naka_x = 0 naka_y = 0 #まずは、すべての画像を画面外に表示 setSpritePosition(img_id_01, soto_x, soto_y) setSpritePosition(img_id_02, soto_x, soto_y) setSpritePosition(img_id_03, soto_x, soto_y) setSpritePosition(img_id_04, soto_x, soto_y) setSpritePosition(img_id_05, soto_x, soto_y) #アニメーションさせる i = 0 while i < 5 view_id = "" #アニメーションで表示する画像のID hide_id = "" #アニメーションで隠す画像のID #それぞれのIDをセットする case i when 0 view_id = img_id_01 hide_id = img_id_05 when 1 view_id = img_id_02 hide_id = img_id_01 when 2 view_id = img_id_03 hide_id = img_id_02 when 3 view_id = img_id_04 hide_id = img_id_03 when 4 view_id = img_id_05 hide_id = img_id_04 end #セットされたIDをもとに、座標を決定する setSpritePosition(view_id, naka_x, naka_y) setSpritePosition(hide_id, soto_x, soto_y) drawCanvas() i = i + 1 waitTime(100) end
おっ!だんだんわかってきたような…感動…ありがとうございます。
じゃあ、whle外でcreateSpriteしてあとはその画像をwhile内で使えば…
…あれ…?何も表示されん…!?
どうしてでしょう…
じゃあ、whle外でcreateSpriteしてあとはその画像をwhile内で使えば…
#画像スプライト deleteAllSprite() #最初に使う前にキャンバスをキレイにしておく drawCanvas() setCanvasVisible(true) #準備 x =0 y =0 w =150 h =150 xx=0 yy=0 ww=150 hh=150 img_id_01 = createSprite(84357) img_id_02 = createSprite(84364) img_id_03 = createSprite(84371) img_id_04 = createSprite(84378) img_id_05 = createSprite(84385) #アニメーションさせる i = 0 while i < 4 case i when 0 setSpriteRect(img_id_01, x,y,w,h, xx,yy,ww,hh) when 1 setSpriteRect(img_id_02, x,y,w,h, xx,yy,ww,hh) when 2 setSpriteRect(img_id_03, x,y,w,h, xx,yy,ww,hh) when 3 setSpriteRect(img_id_04, x,y,w,h, xx,yy,ww,hh) when 4 setSpriteRect(img_id_05, x,y,w,h, xx,yy,ww,hh) end drawCanvas() i = i + 1 waitTime(100) end
…あれ…?何も表示されん…!?
どうしてでしょう…
画像は、それぞれ別のファイルなのですよね?
もしそうでしたら、
既に、切り取りの座標指定が間違っています。
2コマ目移行の画像の切り取り開始位置X座標が
画像サイズの150を超えていますよ。
IDの取得はcreateSprite関数の実行時に生成されますので、
setSpriteRect関数の中で完結させるのではなく
別途、変数に代入しておいてから、利用する形になります。
もしそうでしたら、
既に、切り取りの座標指定が間違っています。
2コマ目移行の画像の切り取り開始位置X座標が
画像サイズの150を超えていますよ。
IDの取得はcreateSprite関数の実行時に生成されますので、
setSpriteRect関数の中で完結させるのではなく
別途、変数に代入しておいてから、利用する形になります。
#変更前 setSpriteRect(createSprite(84357), x,y,w,h, xx,yy,ww,hh) #変更後 img_id_01 = createSprite(84357) setSpriteRect(img_id_01, x,y,w,h, xx,yy,ww,hh)
…すみません、はっきり言ってキャラアニメ切り取りなんてめんどくさいだけだと思ってましたort
エラーは治りました、endの付け忘れです
反省してスプライトを作成するとこまでやりなおしたんですが…
と、とりあえずやっておきました…
えっと…表示させるにはどうしたらいいでしょうか…?
切り取る前の画像を作ったつもりですが、スプライトIDがないと切り抜けないし、だからと言って変数を使うとダブってしまうし…
どうしたらいいでしょうか…
エラーは治りました、endの付け忘れです
反省してスプライトを作成するとこまでやりなおしたんですが…
#1コマ目 x =0 y =0 w =150 h =150 xx=0 yy=0 ww=150 hh=150 setSpriteRect(createSprite(84357), x,y,w,h, xx,yy,ww,hh) #2コマ目 x =150 y =0 w =150 h =150 xx=0 yy=0 ww=150 hh=150 setSpriteRect(createSprite(84364), x,y,w,h, xx,yy,ww,hh) #3コマ目 x =300 y =0 w =150 h =150 xx=0 yy=0 ww=150 hh=150 setSpriteRect(createSprite(84371), x,y,w,h, xx,yy,ww,hh) #4コマ目 x =450 y =0 w =150 h =150 xx=0 yy=0 ww=150 hh=150 setSpriteRect(createSprite(84378), x,y,w,h, xx,yy,ww,hh) #5コマ目 x =600 y =0 w =150 h =150 xx=0 yy=0 ww=150 hh=150 setSpriteRect(createSprite(84385), x,y,w,h, xx,yy,ww,hh)
と、とりあえずやっておきました…
えっと…表示させるにはどうしたらいいでしょうか…?
切り取る前の画像を作ったつもりですが、スプライトIDがないと切り抜けないし、だからと言って変数を使うとダブってしまうし…
どうしたらいいでしょうか…
エラーの内容は、どういったメッセージだったでしょうか。
まずは、そのエラー文を元に
Error一覧で原因を調べてみましょう。
なお、可能性として、考えられる問題点は以下のとおりです。
1)変数の中身が設定されていないまま、変数が使用されている
「x」「n」「m」
2)setCanvasVisible(true)で既に
キャンバスを表示がするように指定しているにもかかわらず、
2週目以降のwhileのループ内で、何度も表示するように指定している
あとは、rurun9さまのコメントにもあるように、
先に必要な画像を作成しておき、
ループ内で表示位置を画面外、画面内、と変更する方が
アニメーションがスムーズになると思います。
まずは、そのエラー文を元に
Error一覧で原因を調べてみましょう。
なお、可能性として、考えられる問題点は以下のとおりです。
1)変数の中身が設定されていないまま、変数が使用されている
「x」「n」「m」
2)setCanvasVisible(true)で既に
キャンバスを表示がするように指定しているにもかかわらず、
2週目以降のwhileのループ内で、何度も表示するように指定している
あとは、rurun9さまのコメントにもあるように、
先に必要な画像を作成しておき、
ループ内で表示位置を画面外、画面内、と変更する方が
アニメーションがスムーズになると思います。
ありがとうございます!
これは、キャラクタアニメみたいな画像なときですか?
僕は違う画像を次々に表示させたいので
としたらえらってしまいましたort
文法ミスらしいのですが…
一応こんな感じにしたいっていうのを…
①顔をくちゅくちゅさせながらかっくんかっくん
②くちゅりながら接近
③顔が下に落ちてほっとしたつかの間…
④効果音とともにいきなり骸骨が上がってくる!!!小学生号泣!!!!
これは、キャラクタアニメみたいな画像なときですか?
僕は違う画像を次々に表示させたいので
#準備 y =0 w =150 h =150 xx=0 yy=0 ww=150 hh=150 i = 0 while i < 5 #切り抜く座標を変更していく case i when 0 setVariable("e", 84357) when 1 setVariable("e", 84364) when 2 setVariable("e", 84371) when 3 setVariable("e", 84378) when 4 setVariable("e", 84385) end deleteAllSprite() #最初に使う前にキャンバスをキレイにしておく drawCanvas() setCanvasVisible(true) #【重要】キャンバスを見えるようにしている setVariable("s", createSprite( getVariable("e") ) #スプライト作成&画像の指定 setSpriteRect(getVariable("s"), x,y,w,h, xx,yy,ww,hh) #載せる絵の指定 setSpritePosition(getVariable("s"), n,m) #位置の指定 setSpriteRotation(getVariable("s"), 0) #回転角度はラジアン。中心は(n-ww/2, m-hh/2) setSpriteScale(getVariable("s"), 1.0, 1.0) #マイナス倍にすると反転する setSpriteZOrder(getVariable("s"), 5) #どれだけ手前に表示するかの値。マイナスは不可 drawCanvas() #スプライトを載せたキャンバスを更新 speak("停止させておくためのspeak") i = i + 1 end
としたらえらってしまいましたort
文法ミスらしいのですが…
一応こんな感じにしたいっていうのを…
①顔をくちゅくちゅさせながらかっくんかっくん
②くちゅりながら接近
③顔が下に落ちてほっとしたつかの間…
④効果音とともにいきなり骸骨が上がってくる!!!小学生号泣!!!!
見分けをつけて使い分けるというわけですか…