public DrawingLayer(string s, Point Position, double ratio, SpritePosition spriteSize) { spriteTexture = Game1.content.Load <Texture2D>(s); SpriteSize = new SpritePosition(spriteSize.X, spriteSize.Y); int SourceW = spriteTexture.Bounds.Width / (SpriteSize.X + 1); int SourceH = spriteTexture.Bounds.Height / (SpriteSize.Y + 1); SourceRect = new Rectangle(0, 0, SourceW, SourceH); Bound = new Rectangle(Position, new Point((int)(SourceW * ratio), (int)(SourceH * ratio))); Ratio = ratio; }
public void GoNext(SpritePosition SpriteSize) { if (this.X == SpriteSize.X) { this.Jump(); } else { this.Increase(); } }
public void SetSprite(string s, SpritePosition spriteSize) //스프라이트를 바꾸면서 동시에 소스영역도 바꿉니다. { if (s.Equals(spriteTexture.ToString())) { return; } spriteTexture = Game1.content.Load <Texture2D>(s); int SourceW = spriteTexture.Bounds.Width / (SpriteSize.X + 1); int SourceH = spriteTexture.Bounds.Height / (SpriteSize.Y + 1); SourceRect = new Rectangle(0, 0, SourceW, SourceH); }
public DrawingLayer(string s, Rectangle boundRect, SpritePosition spriteSize) { //스프라이트시트의 기본 상수들을 지정합니다. spriteTexture = Game1.content.Load <Texture2D>(s); SpriteSize = new SpritePosition(spriteSize.X, spriteSize.Y); int SourceW = spriteTexture.Bounds.Width / (SpriteSize.X + 1); int SourceH = spriteTexture.Bounds.Height / (SpriteSize.Y + 1); SourceRect = new Rectangle(0, 0, SourceW, SourceH); //그림이 그려질 화면 영역을 지정합니다. Bound = boundRect; }
/* 애니메이션*/ public void LoopedAnimation(SpritePosition Frame_Start, SpritePosition Frame_End, int FrameRate) { if (FrameTimer > 0) { FrameTimer--; //일하는 시간이 아닙니다. return; } else //종이 칩니다. 시간이 되었습니다. 일을 합시다. { FrameTimer = FrameRate; //다시 스톱워치를 맞춥니다. Frame.GoLoop(Frame_End, Frame_Start, SpriteSize); //애니메이션을 다음 프레임으로 이동시킵니다. return; //애니메이터는 자러 갑니다. } }
public void Animate(bool isLooped) { if (Actions.Count == 0) { return; } else { if (FrameTimer > 0) { FrameTimer--; return; } else { FrameTimer = FrameRate; string[] s = Actions[0].Split(' '); switch (s[0]) { case "/s": SetSprite(Actions[0].Substring(3)); if (isLooped) { Actions.Add(Actions[0]); } Actions.RemoveAt(0); break; case "/sp": SpritePosition Frame_Start = new SpritePosition(Int32.Parse(s[1].Split(',')[0]), Int32.Parse(s[1].Split(',')[1])); SpritePosition Frame_End = new SpritePosition(Int32.Parse(s[2].Split(',')[0]), Int32.Parse(s[2].Split(',')[1])); Frame.GoLoop(Frame_Start, Frame_End, SpriteSize); if (GetFrame() == Frame_End) { if (isLooped) { Actions.Add(Actions[0]); } Actions.RemoveAt(0); } break; } } } }
public void GoLoop(SpritePosition Max, SpritePosition Min, SpritePosition SpriteSize) { if (this < Min || this > Max) //이상한 범위에 있을 경우 { this.Set(Min.X, Min.Y); return; } if (this < Max) { this.GoNext(SpriteSize); return; } if (this == Max) { this.Set(Min.X, Min.Y); return; } }
public void AttachAnimation(int Frame_rate, SpritePosition Frame_Start, SpritePosition Frame_End) { FrameRate = Frame_rate; Actions.Add("/sp " + Frame_Start.X + "," + Frame_Start.Y + " " + Frame_End.X + "," + Frame_End.Y); }