キャラ製作の小技


AngleDrawとAngleAddの使用例

スプライトを回転させたいけどAngleの
使い方がよくわからない。
一定速度で回転させたいという人のための例です。

[State 1000]
type = AngleDraw
trigger1 = 1

[State 1000]
type = AngleAdd
trigger1 = 1
value = 2


擬似EO-ISM

CAPCOM VS. SNK 2 EOのEO-ISM(GC版ではGC-ISM)を
MUGEN上で再現するためのコマンド
''※記入例 Aボタンを押したまま前キーを長く押し続ける&押してすぐ離す''
[Command]
name = "Command1"
command =/a,~30F;(Aボタンを押したまま前キーを30フレーム溜めて離す)
[Command]
name = "Command2"
command =/a,F;(Aボタンを押したまま前キーを押す)
[State -1,]
type = ChangeState
value = 300
triggerall = command = "Command1"
trigger1 = ctrl
[State -1,]
type = ChangeState
value = 200
triggerall = command = "Command2"
trigger1 = ctrl
CMDファイルは上に記入されたものから優先するため
Command2を先に記入すると前キーを押した時点でCommand2のステートに移行し
Command1が出せなくなる


角度や距離関連

ホーミングする追尾弾等に。

相手キャラまでの角度を調べる
trigger、atanを使います。
atanの返す値はラジアンのため、そのままでは"AngleDraw"等には使えないので度数に直し正負を与えます。
(atan( (p2dist x-(p2dist x=0))/(p2dist y-(p2dist y=0)) )*180/pi ) - ( (p2dist y>0)-(p2dist y<=0))*90

相手キャラとの直接距離を調べる
  • atanな方法
これもatanを使います
9 : 文の人 ◆PpJMaaDGNM sage : 2007/12/16(日) 13:42:36 ID:WvfuHp/S
1乙
前スレの続き
p2dist x/(cos( (atan( (p2dist y-(const(size.mid.pos.y))+enemynear,const(size.mid.pos.y))/(p2dist x))*180/pi)*pi/180))
(cos( (atan( (p2dist y-(const(size.mid.pos.y))+enemynear,const(size.mid.pos.y))/(p2dist x))*180/pi)*pi/180))
この部分でx方向に1フレームの間に進む距離を計算
それをp2dist xに除算で計算
=相対距離
?にならんかなぁ・・・
MUGENについて語るスレpart17より
http://bbs.nicovideo.jp/test/read.cgi/question/1197775862/9
  • 四則演算な方法
ちなみに四則演算だけで出来る方法もあります。また、返す値も多少異なりこちらのが少し小さいようです。
[state fabs-x20]
type = varset
trigger1 = 1
fvar(20)=( P2dist x*( (p2dist x>=0)-(p2dist x<0)) ) + ( (P2dist x = 0)*1)
[state fabs-y21]
type = varset
trigger1 = 1
fvar(21)=( P2dist y*( (p2dist y>=0)-(p2dist y<0)) ) + ( (P2dist y = 0)*1)
[state x 10];x<yなら値を入れ替える
type = varset
trigger1 = 1
fvar(10)=( (fvar(20) > fvar(21))*fvar(20) ) + ( (fvar(20) < fvar(21))*fvar(21) ) + ( fvar(20) = fvar(21) )
[state y 11];x<yなら値を入れ替える
type = varset
trigger1 = 1
fvar(11)=( (fvar(20) < fvar(21))*fvar(20) ) + ( (fvar(20) > fvar(21))*fvar(21) ) + ( fvar(20) = fvar(21) )
[state 0]
type = varset
trigger1 = 1
fvar(0)=fvar(11) / fvar(10)
[state 1]
type = varset
trigger1 = 1
fvar(1)=fvar(0)*fvar(0)
[state 2]
type = varset
trigger1 = 1
fvar(2)=fvar(1) / ( 4 + fvar(1) )
[state 3] ;ここ(fvar(3))を利用
type = varset
trigger1 = 1
fvar(3)=fvar(10) + 2*fvar(10)*fvar(2)