宇宙文字解読3

投稿者:       mini @gsenkyg 投稿日:2014/01/26 05:38

さて今回はイベントアニメーションをテスト試行してみました。

徘徊中に見つけたaoihikawa様のスクリプトを加工使用しています。
ゲームーイベントにアニメーションを入れてみました。
今回の画像は240×180を用意しました。
画像の大きさや、アニメ画像の変更などで、
ゲームオープニングとかエンデングとか、
特別なイベントととかゲーム中のいろんな利用方法が考えられます。
今回は
「メルカバMK4の砲撃シーン」を作成してみました。

尚公開画像を30コマ分用意しましたので、暇のある方はお試し下さい。(w

30画像全てクリップして、このスクリプトでイベントを付ければ動画が再生できると思います。
テスト結果はGIFアニメ並みと思われます。
簡単な話す程度のアニメや、表情アニメであれば30コマで十分すぎるものが出来上がると思いますヨ!。
マップ単位画像が50までですから30程度がよろしいかな?と思います。
また多様すると重くなるので適度がいいのかも?





ちなみに自分の作成しているGIFアニメは99枚の画像を使用しています。
これに使用している画像もそれらから中トビ30枚画像を抽出したものです。
動画で使用される画像数は90秒で3000枚画像程度かと?


#画像スプライト 
deleteAllSprite() #最初に使う前にキャンバスをキレイにしておく 
drawCanvas() 
setCanvasVisible(true) 
#準備 
x =0
y =0
w =240
h =180
xx=0
yy=0
ww=240
hh=180
#画像IDをここに入れます。
img_id_01 = createSprite(221082) 
setSpriteRect(img_id_01, x,y,w,h, xx,yy,ww,hh)

img_id_02 = createSprite(221089) 
setSpriteRect(img_id_02, x,y,w,h, xx,yy,ww,hh)

img_id_03 = createSprite(221096) 
setSpriteRect(img_id_03, x,y,w,h, xx,yy,ww,hh) 

img_id_04 = createSprite(221103) 
setSpriteRect(img_id_04, x,y,w,h, xx,yy,ww,hh) 

img_id_05 = createSprite(221110) 
setSpriteRect(img_id_05, x,y,w,h, xx,yy,ww,hh) 

img_id_06 = createSprite(221117) 
setSpriteRect(img_id_06, x,y,w,h, xx,yy,ww,hh)

img_id_07 = createSprite(221131) 
setSpriteRect(img_id_07, x,y,w,h, xx,yy,ww,hh)

img_id_08 = createSprite(221131) 
setSpriteRect(img_id_08, x,y,w,h, xx,yy,ww,hh)#ここはわざと画像を重複させてあります。 

img_id_09 = createSprite(221138) 
setSpriteRect(img_id_09, x,y,w,h, xx,yy,ww,hh) 

img_id_10 = createSprite(221145) 
setSpriteRect(img_id_10, x,y,w,h, xx,yy,ww,hh) 

img_id_11 = createSprite(221152) 
setSpriteRect(img_id_11, x,y,w,h, xx,yy,ww,hh)

img_id_12 = createSprite(221159) 
setSpriteRect(img_id_12, x,y,w,h, xx,yy,ww,hh)

img_id_13 = createSprite(221166) 
setSpriteRect(img_id_13, x,y,w,h, xx,yy,ww,hh) 

img_id_14 = createSprite(221180) 
setSpriteRect(img_id_14, x,y,w,h, xx,yy,ww,hh) 

img_id_15 = createSprite(221187) 
setSpriteRect(img_id_15, x,y,w,h, xx,yy,ww,hh) 

img_id_16 = createSprite(221194) 
setSpriteRect(img_id_16, x,y,w,h, xx,yy,ww,hh)

img_id_17 = createSprite(221201) 
setSpriteRect(img_id_17, x,y,w,h, xx,yy,ww,hh)

img_id_18 = createSprite(221208) 
setSpriteRect(img_id_18, x,y,w,h, xx,yy,ww,hh) 

img_id_19 = createSprite(221215) 
setSpriteRect(img_id_19, x,y,w,h, xx,yy,ww,hh) 

img_id_20 = createSprite(221222) 
setSpriteRect(img_id_20, x,y,w,h, xx,yy,ww,hh) 

img_id_21 = createSprite(221231) 
setSpriteRect(img_id_21, x,y,w,h, xx,yy,ww,hh)

img_id_22 = createSprite(221238) 
setSpriteRect(img_id_22, x,y,w,h, xx,yy,ww,hh)

img_id_23 = createSprite(221245) 
setSpriteRect(img_id_23, x,y,w,h, xx,yy,ww,hh) 

img_id_24 = createSprite(221252) 
setSpriteRect(img_id_24, x,y,w,h, xx,yy,ww,hh) 

img_id_25 = createSprite(221259) 
setSpriteRect(img_id_25, x,y,w,h, xx,yy,ww,hh) 

img_id_26 = createSprite(221266) 
setSpriteRect(img_id_26, x,y,w,h, xx,yy,ww,hh)
#60
img_id_27 = createSprite(221273) 
setSpriteRect(img_id_27, x,y,w,h, xx,yy,ww,hh)

img_id_28 = createSprite(221280) 
setSpriteRect(img_id_28, x,y,w,h, xx,yy,ww,hh) 

img_id_29 = createSprite(221287) 
setSpriteRect(img_id_29, x,y,w,h, xx,yy,ww,hh) 

img_id_30 = createSprite(221294) 
setSpriteRect(img_id_30, 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)
setSpritePosition(img_id_06, soto_x, soto_y)
setSpritePosition(img_id_07, soto_x, soto_y)
setSpritePosition(img_id_08, soto_x, soto_y)
setSpritePosition(img_id_09, soto_x, soto_y)
setSpritePosition(img_id_10, soto_x, soto_y)
setSpritePosition(img_id_11, soto_x, soto_y)
setSpritePosition(img_id_12, soto_x, soto_y)
setSpritePosition(img_id_13, soto_x, soto_y)
setSpritePosition(img_id_14, soto_x, soto_y)
setSpritePosition(img_id_15, soto_x, soto_y)
setSpritePosition(img_id_16, soto_x, soto_y)
setSpritePosition(img_id_17, soto_x, soto_y)
setSpritePosition(img_id_18, soto_x, soto_y)
setSpritePosition(img_id_19, soto_x, soto_y)
setSpritePosition(img_id_20, soto_x, soto_y)
setSpritePosition(img_id_21, soto_x, soto_y)
setSpritePosition(img_id_22, soto_x, soto_y)
setSpritePosition(img_id_23, soto_x, soto_y)
setSpritePosition(img_id_24, soto_x, soto_y)
setSpritePosition(img_id_25, soto_x, soto_y)
setSpritePosition(img_id_26, soto_x, soto_y)
setSpritePosition(img_id_27, soto_x, soto_y)
setSpritePosition(img_id_28, soto_x, soto_y)
setSpritePosition(img_id_29, soto_x, soto_y)
setSpritePosition(img_id_30, soto_x, soto_y)

#アニメーションさせる 
 i = 0 
 while i < 30
   view_id = "" #アニメーションで表示する画像のID
   hide_id = "" #アニメーションで隠す画像のID 
   #それぞれのIDをセットする
   case i 
    when 0   
      view_id = img_id_01
      hide_id = img_id_30
    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
    when 5   
      view_id = img_id_06
      hide_id = img_id_05
    when 6   
      view_id = img_id_07
      hide_id = img_id_06
    when 7 
      view_id = img_id_08
      hide_id = img_id_07
    when 8  
      view_id = img_id_09
      hide_id = img_id_08
    when 9  
      view_id = img_id_10
      hide_id = img_id_09
    when 10   
      view_id = img_id_11
      hide_id = img_id_10
    when 11   
      view_id = img_id_12
      hide_id = img_id_11
    when 12   
      view_id = img_id_13
      hide_id = img_id_12
    when 13   
      view_id = img_id_14
      hide_id = img_id_13
    when 14   
      view_id = img_id_15
      hide_id = img_id_14
    when 15   
      view_id = img_id_16
      hide_id = img_id_15
    when 16   
      view_id = img_id_17
      hide_id = img_id_16
    when 17   
      view_id = img_id_18
      hide_id = img_id_17
    when 18  
      view_id = img_id_19
      hide_id = img_id_18
    when 19  
      view_id = img_id_20
      hide_id = img_id_19
    when 20   
      view_id = img_id_21
      hide_id = img_id_20
    when 21   
      view_id = img_id_22
      hide_id = img_id_21
    when 22   
      view_id = img_id_23
      hide_id = img_id_22
    when 23   
      view_id = img_id_24
      hide_id = img_id_23
    when 24   
      view_id = img_id_25
      hide_id = img_id_24
    when 25   
      view_id = img_id_26
      hide_id = img_id_25
    when 26   
      view_id = img_id_27
      hide_id = img_id_26
    when 27   
      view_id = img_id_28
      hide_id = img_id_27
    when 28  
      view_id = img_id_19
      hide_id = img_id_28
    when 29  
      view_id = img_id_20
      hide_id = img_id_29


  end 
  
  #セットされたIDをもとに、座標を決定する
  setSpritePosition(view_id, naka_x, naka_y)
  setSpritePosition(hide_id, soto_x, soto_y) 
  drawCanvas()   
  i = i + 1 
  waitTime(100) 

  end
 #画像を消しています。
    setCanvasVisible(false)

    deleteTextAll()

スクリプト記入ミスがあり修整


while i < 20をwhile i < 30に修整

コメントする

コメントするには、ログインする必要があります。

コメント一覧

Material 180953 2 mini  レン(投稿日:2014/01/26 10:07, 履歴)
スクリプト理解してきているようですね。

前回で試作品がもう少し、という話ですが、この調子なら早くできると思いますよ。
       mini @gsenkyg(投稿日:2014/01/26 18:53, 履歴)
レン 様 
コメントありがとうございます。
ゲームを製作していると、途中であれ? と言うのが出てきます。
こんなはずじゃないな~~。こんなのがあったなら。あんなのがあったなら?。いいな~~なんて思うようになります。
でも新しいスクリプトを学ぶと、前に覚えたはずのスクリプトを忘れてる。!(爆
今はそれの繰り返しです。(wwww
Material 180953 2 mini  レン(投稿日:2014/01/27 16:22, 履歴)
よくありますね。
最近長編RPGを作っていたりする時に全然違う!ていうのがあります。

追記
 素材へのコメントありがとうございます!
       mini @gsenkyg(投稿日:2014/01/28 05:52, 履歴)
素材沢山お借りしてます。
ステータスのお勉強をしています。
レベルUPとの関係とモンスター設定との兼ね合いをテストプレーしながら調整中です。
ありがとうございます。
Material 180953 2 mini  レン(投稿日:2014/01/28 16:10, 履歴)
いえいえ。
完成するのを楽しみにしています!
       mini @gsenkyg(投稿日:2014/01/29 14:22, 履歴)
集中工事を進めています。
Cdv30200 aoi icon mini aoihikawa(投稿日:2014/01/26 10:42, 履歴)
こういった、連続や類似したデータを複数扱う場合、
配列を使用すると便利になります

配列についてはこちら

#画像スプライト 
deleteAllSprite() #最初に使う前にキャンバスをキレイにしておく 
drawCanvas() 
setCanvasVisible(true)

#準備 
x =0
y =0
w =240
h =180
xx=0
yy=0
ww=240
hh=180

#表示する座標の設定
soto_x = -200
soto_y = -200

naka_x = 0
naka_y = 0

#画像番号リストを配列として用意
img_id_list_str = "221082,221089,221096,221103,221110,221117,221131,221131,221138,221145,221152,221159,221166,221180,221187,221194,221201,221208,221215,221222,221231,221238,221245,221252,221259,221266,221273,221280,221287,221294"
img_id_list = createArray()
img_id_list = splitString(img_id_list_str, ",")         #,区切りで文字列を分解

img_id = createArray()

i = 0; img_id_list_length = getArrayLength(img_id_list) #長さを保管しておき、ループさせる
while i < img_id_list_length
  img_id_list[i] = toNumber(img_id_list[i])             #文字列になっているので数値に直す
  
  #画像IDをここに入れます
  img_id[i] = createSprite(img_id_list[i])
  setSpriteRect(img_id[i], x,y,w,h, xx,yy,ww,hh)
  
  #まずは、すべての画像を画面外に表示
  setSpritePosition(img_id[i], soto_x, soto_y)

  i = i + 1
end

view_id = "" #アニメーションで表示する画像のID
hide_id = "" #アニメーションで隠す画像のID

#アニメーションさせる 
i = 0
while i < img_id_list_length
  #それぞれのIDをセットする
  if i > 0
    view_id = img_id[i]
    hide_id = img_id[(i - 1)]
  else
    view_id = img_id[i]
  end
  
  #セットされたIDをもとに、座標を決定する
  setSpritePosition(view_id, naka_x, naka_y)
  if i > 0
    setSpritePosition(hide_id, soto_x, soto_y)
  end
  
  drawCanvas()
  i = i + 1 
  waitTime(100)
end

#画像を消しています。
setCanvasVisible(false)
deleteTextAll()


こうすることで
スクリプトが短くすっきりする他、
アニメーションの枚数が増えた場合も
img_id_list_strの内容を編集するだけで
対応が可能になります
       mini @gsenkyg(投稿日:2014/01/26 18:44, 履歴)
aoihikawa様お世話になります。
ありがとうございます。
このあたりになにやらスクリプトの記載ミスがあるようなのですが?


#画像IDをここに入れます
  img_id[i] = createSprite(img_id_list[i])
  setSpriteRect(img_id[i], x,y,w,h, xx,yy,ww,hh)
  
  #まずは、すべての画像を画面外に表示
  setSpritePosition(img_id[i], soto_x, soto_y)
end


setSpritePositionに不正なハンドルが指定されました。ハンドル0は無効です。 line : 29
setSpritePositionに不正なハンドルが指定されました。ハンドル0は無効です。 line : 31
と表示されます。
Cdv30200 aoi icon mini aoihikawa(投稿日:2014/01/26 19:51, 履歴)
初歩ミスですね

上のループ内に
iを加算する式がありませんでした


該当箇所を修正いたしましたので
ご確認ください
       mini @gsenkyg(投稿日:2014/01/26 20:36, 履歴)
aoihikawa様
ご丁寧にありがとうございます。
iを加算する式は下の方にあったのでそれで良いのかと思いましたが、ループ内にも必要となるのですね。
なるほどとの思いです。
それとこのスクリプトで画像枚数を自由にできる点が素晴らしいですね。マップシーンに添ってのアニメーションが自在に表現するに簡素化された感じがします。
Cdv30200 aoi icon mini aoihikawa(投稿日:2014/01/26 22:29, 履歴)
while ~ end で
ループの1セットです

while文についてはこちら

ループ中はこの中しか実行されないため、
上のループでは永久にiが加算されず、
画像の作成枚数が許容量を超えたことで
エラーとなっておりました


なお、この現象を
「無限ループ」と言います
       mini @gsenkyg(投稿日:2014/01/27 00:18, 履歴)
aoihikawa様ありがとうございます。
>「無限ループ」と言います
言葉だけはなんとなく聞いた事があるような気がします。
自分にはまだまだ難しいです。
少しだけ前進した気がしています。
これからも宜しく御願い致します。