public override void LazyAlign(double AlignSpeed) { REMOPoint temp = Pos; REMOPoint v; if (Mode == AlignMode.Horizen) { v = new REMOPoint(0, 1); } else { v = new REMOPoint(1, 0); } for (int i = 0; i < Count; i++) { this[i].MoveTo(temp, AlignSpeed); temp += Interval; if (Mode == AlignMode.Horizen) { temp += new REMOPoint(this[i].Bound.Width, 0); } else { temp += new REMOPoint(0, this[i].Bound.Height); } } }
public void Update(REMOPoint destination, double speed) { int size = Head.Width; Vector2 v = Vector2.Normalize((destination - Head.Center).ToVector2()); Vector2 n = new Vector2(v.Y, -v.X); Head.MoveByVector((v - ((float)speed / 2) * n * (float)Math.Sin(0.1f * StandAlone.FrameTimer)) * 10.0f, speed); for (int i = 0; i < Bodies.Count; i++) { { float interval = 0.3f; float f = (Bodies[i].Center - Head.Center).ToVector2().Length() - interval * size; if (i == 0 && f > 0) { Bodies[i].MoveTo(Head.Center, f * interval / 2); } if (i != 0) { f = (Bodies[i].Center - Bodies[i - 1].Center).ToVector2().Length() - interval * size; } if (i != 0 && f > 0) { Bodies[i].MoveTo(Bodies[i - 1].Center, f * interval / 2); } } } }
} //컴포넌트 간의 간격을 반환합니다. public SimpleAligned(AlignMode mode, REMOPoint pos, int interval) : base() { Mode = mode; Pos = pos; if (Mode == AlignMode.Horizen) { Interval = new REMOPoint(interval, 0); } else { Interval = new REMOPoint(0, interval); } }