エフェクト表示ができてきたよ


2018年 1月31日
 
 
 エフェクト表示の物理攻撃と魔法の半分(火、水、風)が出来たので報告。

 
 
 いやあ、意外と手間だよ、コレ。

 エフェクト表示は初めてという事もあるけど、やはり2ヶ月も費やす事になりそうだし、グラのデータ容量も結構大きいし、プログラムも意外とややこしいし、絶対必要という訳でも無いし、初心者はやらない方が良いと思った。

 少なくとも最初の RUN(プログラム実効)時にグラの読み込みで遅くなるので、一通りゲームが完成してから最後に付けた方が良いと思う。


 それじゃあ今回はブログ初の試みで動画で。

 今回投稿が遅れたのはこの動画のせいもあって、録画とブログに埋め込む方法を模索していたからというのもある。
 
 
 ではまず物理アタックから

 武器名の表示がワンテンポずれてるが、現在これは確認用なので。
 
 
 次は素アタック

 うわっ!ゆっくり実況音声が混ざってるよ(笑)
 自分でビックリッしたけど気にしないで下さい。

 動画は引っかきと噛み付きだけだけど、まあそんな感じ。
 
 
 最後に魔法の一部を

 う~ん、プログラムの都合上こっちは名前表示がずれてないみたいだけど、まあ大体こんな感じ。
 
 
 
 それじゃあソースがどんな事になってるか公開。

 今回エフェクトは始めてなので、要領が悪くソースはベタベタのグチャグチャになってる。
 
 
 まず表示関係から

; エフェクト表示

	efb=20 ; 最大数
	efd=12 ; データ数

	dim ef,efd*efb	; データ
;(0=種類、1=グラNo.2=表示場所、3=アニメc、4=速さc、5=速さ、
;  6=x、7=y、8=x動き、9=y動き、10=透明 or 加算、11=移動時間)

	ddim eff,4*efb	; 実数データ
; (0=反転x、1=反転y、2=回転、3=回転速度)



#deffunc efsx ; 座標x

	if efsn2<=3 : ef(efg+6)=bcx1(efsn2)+40		; x
	if efsn2>=4 : ef(efg+6)=bcx2(efsn2-3)+40	; x

	return


#deffunc efsm int efsmf ; 向き

	repeat 1
	 if efsmf=1 : eff(efg2+0)=1.0  : eff(efg2+1)=1.0  : break ; 正
	 if efsmf=2 : eff(efg2+0)=-1.0 : eff(efg2+1)=1.0  : break ; 左右反転
	 if efsmf=3 : eff(efg2+0)=1.0  : eff(efg2+1)=-1.0 : break ; 上下反転
	 if efsmf=4 : eff(efg2+0)=-1.0 : eff(efg2+1)=-1.0 : break ; 全反転
	loop

	if efsn2<=3 : eff(efg2+0)*=-1.0	; 左の隊の場合の反転

	return

#deffunc efs int efsf,int efsn1,int efsn3,int efsd,int efsa,int efse ; int efsx,int efsy,int dfsr,int dfsrn
; エフェクトセット(フラグ、グラ、速さ、反転、移動時間、透明か加算か); 動きx、動きy、回転、回転速度)

	if efsf=0 : return

	f=0
	repeat efb ; No,ピック
	 if ef(efd*cnt)=0 : efg=efd*cnt : efg2=4*cnt : f=1 : break
	loop
	if f=0 : return ; 空きが無い


	ef(efg)=efsf		; 表示種類
	ef(efg+1)=efsn1		; グラNo.
	ef(efg+2)=efsn2		; 表示場所
	ef(efg+3)=0			; アニメカウント
	ef(efg+4)=0			; アニメ速さカウント
	ef(efg+5)=efsn3		; アニメ速さ
	ef(efg+6)=0			; x
	ef(efg+7)=btly1+65	; y
	ef(efg+8)=0			; 動きx
	ef(efg+9)=0			; 動きy
	ef(efg+10)=efse		; 表示種類(0=通常、1=加算)
	ef(efg+11)=efsa		; 移動時間

	repeat 4
	 eff(efg2+cnt)=0.0 ; リセット
	loop


	switch efsf ; 表示種類
	 case 1 ; 敵固定
	  if fs=1 : efsn2=et+3 : else : efsn2=et ; 場所x
	   efsx		; x
	  efsm efsd	; 向き
	 swbreak
	 case 2 ; 投射
	  if fs=1 : efsn2=ut : else : efsn2=ut+3 ; 場所x
	  if itn=289 : if fs=1 : efsn2=4 : else : efsn2=1
	   efsx	; x

	  n=ut+et-1 : ef(efg+8)=(btlxk*n+btlck)/efsa : if fs=2 : ef(efg+8)*=-1 ; 距離とスピード
	  if itn=289 : ef(efg+8)=(btlxk*2)/efsa : if fs=2 : ef(efg+8)*=-1

	  efsm efsd	; 向き
	  if id(ig+19)=7 : nf1=-1.0 : nf2=1.0 : else : nf1=1.0 : nf2=-1.0 ; 弓
	  ; if fs=1 : eff(efg2+0)=nf1 : else : eff(efg2+0)=nf2	; 向きx
	  ;eff(efg2+1)=1.0	; 向きxy
	 swbreak
	 case 3 ; 自分固定
	  if fs=1 : efsn2=ut : else : efsn2=ut+3 ; 場所x
	  efsx	; x
	  efsm efsd	; 向き
	 swbreak
	 case 4 ; 全体
	  et=2 : if fs=1 : efsn2=et+3 : else : efsn2=et ; 場所x
	   efsx ; x
	  efsm efsd	; 向き
	 swbreak
	swend


; 回転
	if efsn1=5  : if efsn2<=3 : eff(efg2+2)=0.6  : else : eff(efg2+2)=-0.6	; 曲刀
	if efsn1=7  : if efsn2<=3 : eff(efg2+2)=-0.3 : else : eff(efg2+2)=0.3	; 刺突剣
	if efsn1=11 : if efsn2<=3 : eff(efg2+2)=-0.9 : else : eff(efg2+2)=0.9	; 大剣
	if efsn1=13 : if efsn2<=3 : eff(efg2+2)=0.6  : else : eff(efg2+2)=-0.6	; 槌
	if efsn1=19 : if efsn2<=3 : eff(efg2+2)=1.6 : else : eff(efg2+2)=-1.6	; 大砲

	if efsn1=20 : if efsn2<=3 : eff(efg2+2)=1.6 : else : eff(efg2+2)=-1.6	; フャイヤー
	if efsn1=24 : if efsn2<=3 : eff(efg2+2)=0.6 : else : eff(efg2+2)=-0.6	; フレイムアロー

	if efsn1=30 : if efsn2<=3 : eff(efg2+2)=-1.9 : else : eff(efg2+2)=1.9	; アイスニードル
	if efsn1=31 : if efsn2<=3 : eff(efg2+2)=1.6  : else : eff(efg2+2)=-1.6	; ウォーターストリーム
	if efsn1=32 : eff(efg2+0)=0.8 : eff(efg2+1)=0.8	; ピュリファイ
	if efsn1=33 : eff(efg2+0)=0.8 : eff(efg2+1)=0.8	; アイスエンチャント
	if efsn1=34 { ; アイスジャベリン
		eff(efg2+0)=0.2 : eff(efg2+1)=1.8
		ef(efg+3)=10 : ef(efg+11)=30
		if efsn2<=3 : eff(efg2+2)=-1.6  : else : eff(efg2+2)=1.6
	}
	if efsn1=35 : eff(efg2+2)=-1.7 : eff(efg2+2)=1.7	; アイスピラー
	if efsn1=38 { ; メイルシュトローム
		eff(efg2+0)=2.5 : eff(efg2+1)=1.0
		ef(efg+7)+=24
	}
	if itn=270 { ; ブリザード
	 n1=ef(efg+6)-btlxk : n2=ef(efg+6)+btlxk ; x
	 eff(efg2+0)=0.8 : eff(efg2+1)=0.8

	 repeat 2 : cnt2=cnt ; 左右のブリザード
	  repeat efb ; No,ピック
	   efg=efd*cnt : efg2=4*cnt : if ef(efg)>0 : continue 
		ef(efg)=efsf		; 表示種類
		ef(efg+1)=efsn1		; グラNo.
		ef(efg+3)=0			; アニメカウント
		ef(efg+4)=0			; アニメ速さカウント
		ef(efg+5)=efsn3		; アニメ速さ
		if cnt2=0 : ef(efg+6)=n1	; x
		if cnt2=1 : ef(efg+6)=n2	; x
		ef(efg+7)=btly1+65	; y
		ef(efg+8)=0			; 動きx
		ef(efg+9)=0			; 動きy
		ef(efg+10)=efse		; 表示種類(0=通常、1=加算)
		ef(efg+11)=efsa		; 移動時間

		repeat 4
		 eff(efg2+cnt)=0.0 ; リセット
		loop
		efsm efsd	; 向き
		eff(efg2+0)=0.8 : eff(efg2+1)=0.8
		break
	  loop
	 loop
	}

	if efsn1=40 : eff(efg2+0)=1.0 : eff(efg2+1)=0.3	; ウインドカッター
	if efsn1=41 : eff(efg2+0)=0.7 : eff(efg2+1)=0.7	; ウインドムーブ
	if efsn1=42 : eff(efg2+0)=0.6 : eff(efg2+1)=0.6	; サンダー
	if efsn1=43 : eff(efg2+0)=0.8 : eff(efg2+1)=0.8	; ウィンドエンチャント
	if efsn1=44 : eff(efg2+0)=0.8 : eff(efg2+1)=1.8	; サンダーウエポン
	if efsn1=47 { ; ライトニングボルト
		eff(efg2+0)=0.5 : eff(efg2+1)=3.0
		if efsn2<=3 : eff(efg2+2)=1.6  : else : eff(efg2+2)=-1.6
	}
	if efsn1=48 {
		eff(efg2+0)=1.4 : eff(efg2+1)=1.4	; ウィンドストーム}
		if fs=1 : ef(efg+6)-=40 : else : ef(efg+6)+=40 ; x
	}

	return


#deffunc efp ; エフェクトプット

	repeat efb
	 efg=efd*cnt : efg2=4*cnt ; データの先頭
	 if ef(efg)=0 : continue ; 無い

	 ef(efg+4)+ : if ef(efg+4)>=ef(efg+5) : ef(efg+3)+ : ef(efg+4)=0 : ; アニメウエイト処理

	 if ef(efg+10)=0 : gmode 3,,,255 : else : gmode 5,,,255 ; 透明、加算

	 pos ef(efg+6),ef(efg+7)
	  celput efw(ef(efg+1)),ef(efg+3),eff(efg2+0),eff(efg2+1),eff(efg2+2)
	 if ef(efg+3)>=efga(ef(efg+1)) : ef(efg)=0 : break ; アニメ
	 if ef(efg+3)<=ef(efg+11) : ef(efg+6)+=ef(efg+8) ; 動きx
	 ef(efg+7)+=ef(efg+9) ; 動きy
	 eff(efg2+2)+=eff(efg2+3) ; 回転
	loop

	return


#deffunc bts1 ; 素アタック

	if us=6 or us=11 or us=13 or us=33 or us=36 or us=46 or us=51 or us=72 or us=74 or us=97 or us=111 or us=167 or us=181 or us=185 or us=205 : efs 1,3,2,1 : return ; 牙
	if us=71 or us=92 or us=96 or us=118 or us=132 or us=184 : efs 1,2,2,2 : return ; 爪
	if us=7 or us=16 or us=52 or us=135 or us=168 : efs 1,4,2,2 : return ; 尾
	if us=1 or us=8 or us=12 or us=32 or us=35 or us=43 or us=50 or us=73 or us=94 or us=95 or us=112 or us=120 or us=151 or us=152 or us=153 or us=169 or us=183 or us=190 or us=192 : efs 1,9,2,1 : return ; 体当たり
	efs 1,1,2,1 ; 素手

	return


#deffunc bts2 ; 近接武器アタック

	if itn=10 or itn=11 or itn=16 or itn=24 : efs 1,5,1,1 : return ; 曲刀
	if itn=12 or itn=15 or itn=23 : efs 1,7,2,2 : return ; 刺突剣
	if id(ig+19)=1 : efs 1,15,2,2 : return ; 剣
	if id(ig+19)=2 : efs 1,11,2,1 : return ; 大剣
	if id(ig+19)=3 : efs 1, 8,2,1 : return ; 槍
	if id(ig+19)=4 : efs 1,12,2,2 : return ; 斧
	if id(ig+19)=5 : efs 1,13,2,2 : return ; 槌
	if id(ig+19)=6 : efs 1,14,2,4 : return ; 杖

	return


#deffunc bts3 ; 投射武器アタック

	if id(ig+19)=7	: efs 2,16,1,1,8	: return ; 弓
	if id(ig+19)=8	: efs 2,18,1,2,9	: return ; ボウ
	if itn=90		: efs 2,19,2,1,11	: return ; 大砲
	if id(ig+19)=9	: efs 1,17,1,1,0	: return ; 銃

	return


#deffunc bts4 ; 魔法

	if itn=251 : efs 2,20,2,3,17,1	: return	; ファイヤー
	if itn=252 : efs 3,21,1,1,0 ,1	: return	; ファイヤーウェポン
	if itn=253 : efs 3,22,2,1,0 ,1	: return	; バーサーク
	if itn=254 : efs 1,23,2,1,0 ,1	: return	; ファイヤーピレイム
	if itn=255 : efs 2,24,1,1,15,1	: return	; フレイムアロー
	if itn=256 : efs 3,25,1,1,0 ,1	: return	; バトルソング
	if itn=257 : efs 2,26,1,1,7 ,1	: return	; ファイアーボール
	if itn=258 : efs 4,28,3,1,0 ,1	: return	; ファイヤーウォール
	if itn=259 : efs 4,29,3,1,0 ,1	: return	; エクスプロージョン

	if itn=261 : efs 2,30,1,3,18,1	: return	; アイスニードル
	if itn=262 : efs 2,31,2,3,15,1	: return	; ウォーターストリーム
	if itn=263 : efs 3,32,1,1,0 ,1	: return	; ピュリファイ
	if itn=264 : efs 3,33,1,1,0 ,1	: return	; アイスエンチャント
	if itn=265 : efs 2,34,1,1,18,1	: return	; アイスジャベリン
	if itn=266 : efs 1,35,3,4,0 ,0	: return	; アイスピラー
	if itn=267 : efs 3,36,2,1,0 ,1	: return	; ウォータースクリーン
	if itn=268 : efs 4,37,3,1,0 ,1	: return	; 津波
	if itn=269 : efs 4,38,3,1,0 ,1	: return	; メイルシュトローム
	if itn=270 : efs 4,39,2,1,0 ,1	: return	; ブリザード

	if itn=281 : efs 2,40,1,1,8 ,1	: return	; ウインドカッター
	if itn=282 : efs 3,41,2,1,0 ,1	: return	; ウインドムーブ
	if itn=283 : efs 1,42,1,1,0 ,0	: return	; サンダー
	if itn=284 : efs 3,43,1,1,0 ,0	: return	; ウィンドエンチャント
	if itn=285 : efs 3,44,1,1,0 ,1	: return	; サンダーウエポン
	if itn=286 : efs 4,45,2,1,0 ,0	: return	; セイレーンボイス
	if itn=287 : efs 3,46,2,1,0 ,1	: return	; ウィンドウォール
	if itn=288 : efs 4,47,2,1,0 ,1	: return	; ライトニングボルト
	if itn=289 : efs 2,48,3,1,20,1	: return	; ウィンドストーム

	return


#deffunc bts5 ; その他のエフェクト

	if itn=257 : efs 1,27,1,1,0 ,1	: return	; ファイアーボールの爆発

	return

 
 
 まあ、なんとも要領の悪いプログラムになってるね。

 慣れたらアイテムデータの方に表示種類とか表示方法のデータを埋め込んだ方が良いんだろうけど。

 efsという命令でセット、efpという命令で 1フレーム表示になってる。

 戦闘プログラムからの呼び出しはワンクッション置いて、bts1bts4から efsを呼び出す事にした。

 種類が多かったので。
 
 
 
 次に戦闘プログラムの方はどうなってるかと言うと。

 bts1~bts4と言うのがエフェクトを設定するコマンドで、bw 10というのは 10フレーム待つという事。
 
 

#deffunc bw int bwn ; バトルウエイト

	repeat bwn
	 redraw 0
	  color 0,0,0 : boxf : color 255,255,255
	  btl_put
	  efp
	  dmp_put
	  bp bpn
	  dg_put
	 redraw 1
	 await 1000/20
	loop

	return


#deffunc atk int atkf,int atkn,int atkrg
; 攻撃(フラグ(0=素手、1=武器、2=魅惑)、攻撃値、射程) -------

	atkn2=atkn : atkf2=atkf ; 攻撃処理用フラグ

	switch atkf
	 case 0 ; 素手
	  if  us=129  or us=94 : swbreak	; 物理アタックしない
	  rang atkrg : if rangf=0 : swbreak	; 射程外
	   bts1 : atk_syo : bw 20			; 表示、攻撃処理
	 swbreak
	 case 1 ; 武器
	  if id(ig+19)=7 or id(ig+19)=8 or id(ig+19)=9 or id(ig+19)=10 { ; 弓、ボウガン、銃、手裏剣
	   if ud(ug+8)=24 : brang atkrg  : if rangf>0 : bts3 : atk_syo : bw 20 : swbreak	; スナイピング
	   if ud(ug+8)=25 : rang atkrg+1 : if rangf>0 : bts3 : atk_syo : bw 20 : swbreak	; 強弓
	   if ud(ug+8)=26 { ; 貫通
		repeat 3,1 : et=cnt
		 if atkrg<(ut-1)+et : break				; 射程外
		 en=ffn(et) : if en=0 : continue		; 隊列にいない
		 eg=en*udb : if ud(eg+26)<=0 : continue ; HPが0
		  bts3 : atk_syo : bw 20 : gsr-=25						; 攻撃処理
		loop
		swbreak
	   }
	   rang atkrg : if rangf=0 : swbreak ; 射程外
	    bts3 : atk_syo : bw 20 ; 投射武器、表示、攻撃処理
	  }

	  rang atkrg : if rangf=0 : swbreak
	   bts2 : atk_syo : bw 20 ; 近接武器、表示、攻撃処理
	 swbreak
	 case 2 ; 魅惑
	  bts1 : atk_syo : bw 20 ; 攻撃処理
	 swbreak
	swend

	return


#deffunc matk_syo ; 魔法攻撃処理

	zk1=zk_syo(ud(ug+7))		; 種族属性補整
	zk2=zk2_syo(mzk2,matkn2)	; アイテム属性補整
	 dmg 2,ud(ug+22)

	return


#deffunc matk int matkf,int mzk,int matkn,int matkrg
; 魔法攻撃(フラグ、属性、攻撃値、射程) -------

	mzk2=mzk : matkn2=matkn

	switch matkf
	 case 0 ; 手前の一体 --------------
	  rang matkrg : if rangf=0 : swbreak ; 射程判定
	   bts4 : matk_syo : bw 20
	 swbreak
	 case 1 ; 後列の一体 --------------
	  brang matkrg : if rangf=0 : swbreak ; 射程判定
	   bts4 : matk_syo : bw 20
	 swbreak
	 case 2 ; 貫通 --------------
	  n1=ut+2 : if n1>matkrg : n2=matkrg : else : n2=n1 ; 距離
	  rang n2 : if rangf=0 : swbreak ; 射程判定
	  et=n2-ut+1 ; 最後尾
	  bts4 : matk_efg=efg : bwc=0 ; エフェクト表示

	  repeat 3,1 : et=cnt
	   repeat ; 移動ウエイト
	    bwc+ : bw 1 : if bwc>20 : break
		if itn=268 or itn=288 : break ; 津波
	    if fs=1 : if ef(matk_efg+6)>=btlx2+btlxk*(et-1)+0 : break ; 対象の座標xに来た
	    if fs=2 : if ef(matk_efg+6)<=btlx1+btlxk*(3-ut)+0 : break
	   loop

	   if matkrg<(ut-1)+et : break		; 射程外
	   en=ffn(et) : if en=0 : continue	; 隊列にいない
	   eg=en*udb : if ud(eg+26)<=0 : continue ; HPが0
		matk_syo
	   gsr-=25							; 威力減衰
	  loop

	  repeat ; 残りのエフェクトウエイト
	   if bwc>20 : break
	   bwc+ : bw 1
	  loop
	 swbreak
	 case 3 ; 全列 --------------
	 rang matkrg : if rangf=0 : swbreak ; 射程判定
	  et=2 : bts4 : et=2 ; エフェクト表示

	  repeat matkrg-ut+1,1
	   if cnt=4 : break
	   et=cnt : en=ffn(et) : if en=0 : continue ; 隊列にいない
	   eg=en*udb : if ud(eg+26)<=0 : continue ; HPが0
		matk_syo
	  loop
	  bw 20 ; 表示ウエイト
	 swbreak
	 case 4 ; 着弾範囲型 --------------
	  f=0
	  repeat 3,1 ; 3体いるか
	   if ffn(cnt)=0 or ud(ffn(cnt)*udb+26)<=0 : f=1 : break
	  loop
	  if matkrg<(ut-1)+2 : f=1 ; 真ん中に射程が届くか
	  if f=0 { ; 3体の場合
	   et=2 : bts4 : bw 10 ; 弾道エフェクト
	   gsr=100	; 中央
	    et=2 : en=ffn(et) : bts5 : eg=en*udb : matk_syo
	   gsr=75	; 左右
	    et=1 : en=ffn(et) : bts5 : eg=en*udb : matk_syo
	    et=3 : en=ffn(et) : bts5 : eg=en*udb : matk_syo
	     bw 10	; 爆発ウエイト
	   swbreak
	  }
	  rang matkrg : if rangf=0 : swbreak		; 射程内に敵がいなかった
	   bts4 : bw 10 ; 弾道エフェクト
	    bts5 : matk_syo	; 1体目
	  et+ : if et>3 : swbreak					; 範囲外
	   en=ffn(et) : if en=0 : swbreak			; 2体目にいない
	    eg=en*udb : if ud(eg+26)<=0 : swbreak	; HPが0
	     gsr=75 : bts5 : matk_syo ; 2体目
	 swbreak
	 case 5 ; 押し出し
	  rang matkrg : if rangf=0 : swbreak ; 射程判定
	   bts4 : matk_syo : bw 15
	  if et=3 : swbreak ; 最後列
	  if fs=1 : if fn2(fs2+et+1)=0 or ud(fn2(fs2+et+1)*udb+26)<=0 : fn2(fs2+et+1)=fn2(fs2+et) : fn2(fs2+et)=0 ; 押し出し
	  if fs=2 : if fn1(fs1+et+1)=0 or ud(fn1(fs1+et+1)*udb+26)<=0 : fn1(fs1+et+1)=fn1(fs2+et) : fn1(fs1+et)=0 ; 押し出し
	  ffn(et+1)=ffn(et) : ffn(et)=0
	  bw 5
	 swbreak
	 case 6 ; 引き寄せ
	  rang matkrg : if rangf=0 : swbreak ; 射程判定
	  if et=1 : swbreak ; 最前列
	  if fs=1 : if fn2(fs2+et-1)=0 or ud(fn2(fs2+et-1)*udb+26)<=0 : fn2(fs2+et-1)=fn2(fs2+et) : fn2(fs2+et)=0
	  if fs=2 : if fn1(fs1+et-1)=0 or ud(fn1(fs1+et-1)*udb+26)<=0 : fn1(fs1+et-1)=fn1(fs1+et) : fn1(fs1+et)=0
	  ffn(et-1)=ffn(et) : ffn(et)=0
	 swbreak
	 case 7 ; ランダム1体
	  if fs=1 : n=2 : else : n=1
	   en=rdp(n) : if en=0 : swbreak ; unNo.決定
	    repeat 3,1
	     if fs=1 : if fn2(fs2+cnt)=en : et=cnt : break
	     if fs=2 : if fn1(fs1+cnt)=en : et=cnt : break
	    loop
	    eg=en*udb : bts4 : matk_syo : bw 20
	 swbreak
	swend

	return

 
 
 着弾範囲型のファイアーボールとか、貫通攻撃なんかのエフェクトとダメージのタイミングをプログラムするのが手間です。
 
 
 
 最後に画像を読み込むソースを一部だけ

*effect_syoki

	efwb=10			; エフェクト画像数
	dim efw,efwb	; 画像No,
	dim efgx,efwb	; 大きさx
	dim efgy,efwb	; 大きさy
	dim efga,efwb	; アニメ数


	fi2="effect/"	; ファイル名

	n2=effectw		; 画像No,

	n1=1 : efw(n1)=n2 : n2+
	 efgx(n1)=120 : efgy(n1)=120 : efga(n1)=9
	  celload fi+fi2+"pipo-btleffect002.png",efw(n1) ; 素手1
	   celdiv efw(n1),efgx(n1),efgy(n1),efgx(n1)/2,efgy(n1)/2

	n1=2 : efw(n1)=n2 : n2+
	 efgx(n1)=120 : efgy(n1)=120 : efga(n1)=8
	  celload fi+fi2+"pipo-btleffect121.png",efw(n1) ; 牙2
	   celdiv efw(n1),efgx(n1),efgy(n1),efgx(n1)/2,efgy(n1)/2

	n1=3 : efw(n1)=n2 : n2+
	 efgx(n1)=120 : efgy(n1)=120 : efga(n1)=8
	  celload fi+fi2+"pipo-btleffect122.png",efw(n1) ; 爪3
	   celdiv efw(n1),efgx(n1),efgy(n1),efgx(n1)/2,efgy(n1)/2

	return

 
 
 こんな感じだけど、今半分で 50個くらい読み込んでる。

 このデータ量はモンスターカードやアイテム画像なんかより遥かに多い。

 動画なので。
 
 
 と、まあそんな感じでプログラムといい、グラを用意する手間といい、データ量といい、エフェクト表示は思ったより簡単でない事が分かりました。
 
 
 では、次回はエフェクトの後半を作っていきます。

「エフェクト表示ができてきたよ」への2件のフィードバック

  1. 初めまして。HSPでのアプリの作り方を調べていたらこのサイトを見つけました。
    無理をしない様に気を付けながら頑張ってください。応援してます。

    1. おおっ!
      なんと初コメをもらいました、ありがとうございます。
      なにしろ初めての事なので発見が遅れました済みません。
      お気遣いと応援ありがとうございます m(_ _)m

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です