我已经有这个问题已经有一个星期左右的时间没有人能够帮助我(甚至没有在具有实际Danmakufu故障排除线程和所有......的论坛上)。所以,老板的动画不能可靠地工作。有时动画会播放,有时却不播放。我认为它与if()语句有关,但我不知道它们是什么。我尝试解释一些Danmakufu特定的东西给那些不熟悉它的人(但熟悉一般的类C编程)可以提供帮助。
@DrawLoop {} - 这是脚本的重要部分,所有与boss相关的绘图都位于此处。 SetTexture,SetRenderState,SetAlpha,SetGraphicScale和SetGraphicAngle - 各种绘图选项,用于定义绘制boss的方式。 GetSpeedX和GetSpeedY - 获取boss的x和y速度值(可以是负数)。 SetGraphicRect - 定义要显示的图像的区域。 SetGraphicRect(0,0,31,31);从左上角绘制一个32x32的区域。 GetAngle - 获取老板运动的角度 DrawGraphic - 画老板 GetX和GetY - 获取敌人的x和y坐标(本例中为boss)
以下是您需要的完整功能列表:http://dmf.shrinemaiden.org/wiki/Functions_(0.12m)
注意:frame,frame2和angle是在@DrawLoop {}之外定义的变量,以使它们成为全局变量。
脚本
@DrawLoop {
SetTexture(Boss); SetRenderState(ALPHA); SetAlpha(255); SetGraphicScale(1.5, 1.5); SetGraphicAngle(0, 0, 0); if(int(GetSpeedX())==0 && int(GetSpeedY())==0) { if(frame<15){ SetGraphicRect(0, 0, 31, 31); } if(frame>=15){ SetGraphicRect(32, 0, 64, 31); } frame++; frame2 = 0; } if(angle>=315 && angle<=359) { if(frame2<5){ SetGraphicRect(0, 96, 31, 128); } if(frame2>5 && frame2<10){ SetGraphicRect(32, 96, 63, 128); } if(frame2>10 && frame2<15){ SetGraphicRect(64, 96, 95, 128); } if(frame2>15){ SetGraphicRect(32, 96, 63, 128); } frame = 0; frame2++; } if(angle>=0 && angle<=44) { if(frame2<5){ SetGraphicRect(0, 96, 31, 128); } if(frame2>5 && frame2<10){ SetGraphicRect(32, 96, 63, 128); } if(frame2>10 && frame2<15){ SetGraphicRect(64, 96, 95, 128); } if(frame2>15){ SetGraphicRect(32, 96, 63, 128); } frame = 0; frame2++; } if(angle>=135 && angle<=224) { if(frame2<5){ SetGraphicRect(0, 64, 31, 96); } if(frame2>5 && frame2<10){ SetGraphicRect(32, 64, 63, 96); } if(frame2>10 && frame2<15){ SetGraphicRect(64, 64, 95, 96); } if(frame2>15){ SetGraphicRect(32, 64, 63, 96); } frame = 0; frame2++; } if(angle>=225 && angle<=314) { if(frame2<5){ SetGraphicRect(64, 32, 95, 63); } if(frame2>5 && frame2<10){ SetGraphicRect(32, 32, 63, 63); } if(frame2>10 && frame2<15){ SetGraphicRect(0, 32, 31, 63); } if(frame2>15){ SetGraphicRect(32, 32, 63, 63); } frame = 0; frame2++; } if(angle>=45 && angle<=134) { if(frame2<5){ SetGraphicRect(0, 32, 31, 63); } if(frame2>5 && frame2<10){ SetGraphicRect(32, 32, 63, 63); } if(frame2>10 && frame2<15){ SetGraphicRect(64, 32, 95, 63); } if(frame2>15){ SetGraphicRect(32, 32, 63, 63); } frame = 0; frame2++; } if(frame >= 30) { frame = 0; } if(frame2 >= 20) { frame2 = 0; } angle = GetAngle; DrawGraphic(GetX, GetY);
}
答案 0 :(得分:0)
这是一个老问题,但有些事情你应该注意。首先,您没有覆盖整个角度范围,因此对于某些角度(例如225),什么都不会发生。其次,角度没有标准化。我建议使用角度%360,使大于360的角度归一化到0-360范围。如果您尚未解决问题,这可能会解决问题。