动画无法可靠工作(Danmakufu 0.12m)

时间:2014-11-13 17:52:39

标签: c animation math

我已经有这个问题已经有一个星期左右的时间没有人能够帮助我(甚至没有在具有实际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);
     

}

1 个答案:

答案 0 :(得分:0)

这是一个老问题,但有些事情你应该注意。首先,您没有覆盖整个角度范围,因此对于某些角度(例如225),什么都不会发生。其次,角度没有标准化。我建议使用角度%360,使大于360的角度归一化到0-360范围。如果您尚未解决问题,这可能会解决问题。