[英]XNA - Can't change sprite position (move it by keyboard input)
對於我使用XNA的第一個項目,我遵循了一個教程,該教程說明了如何在隨機放置的圖塊之間制作一個小小的正方形面。 是的,太酷了! 好吧,不是很多,但是它可以正常工作。
我不了解職位更新的工作原理。 我的意思是,我期望繪制每個幀,但是Draw函數僅在開始時調用,當從內容加載紋理時,它只是通過添加矢量值來更新位置。
下一步 :我嘗試實現(我自己就是在這里)動畫精靈,而不是第一個項目的正方形。 Sprite具有動畫效果 (是一個走路的人),但不再通過鍵盤輸入移動...
更新
好的,我想我找到了問題。 我下載的類的Draw方法比我以前使用的方法更復雜...
batch.Draw(myTexture, Position, sourcerect, Color.White, Rotation, Origin, Scale, SpriteEffects.None, Depth);
...因為有一個“位置”,甚至還有一個“原點”,我沒有嘗試更新。 如果不重要,我什至要刪除它...我會嘗試一下!
編輯 :我做了那些嘗試,仍然相同...
更新
問題已清除,此處為我應用程序的完整代碼:
主類:http:// pastebin.com/EUexh9H1
控制器類別: http : //pastebin.com/ZEcY0DXT
下載的課程: http : //pastebin.com/H2ZDu6bs
(在此示例中,我僅添加了一個“位置”和Draw調用)
更新
我試圖從一開始就開始整個項目,以擁有更好,更簡潔的代碼,但是還是一樣。 我只是想用Position += Vector2.UnitX;
移動動畫紋理Position += Vector2.UnitX;
,但完全沒有移動...
框架會發生什么變化? 我的意思是,當我用“位置”調用平局時,框架如何影響它? 如果可以...
在您的batch.Draw
方法中,您使用screenPos
,它作為參數傳遞,但我希望有一個Vector2
類變量代表您的精靈在屏幕上的當前位置。 (我不知道你在哪里叫DrawFrame
)
如果要更新該位置,則需要在類的Update
方法中更改該類變量。 您不必將其他參數添加到DrawFrame
和UpdateFrame
,您已經擁有所需的內容。
編輯
在Class2 Update
您只需要執行以下操作:
ActiveSpriteTexture.Position += /* whatever you need */
我不知道Movement * (float)gameTime.ElapsedGameTime.TotalMilliseconds / 15
是什么。
而且UpdateFrame
不需要Position
參數,該方法應該只更新您的精靈的動畫。
與DrawFrame
相同,您必須繪制類變量Position,但是您應該已經完成了此編輯。
解決了。
問題在於該位置是在DrawFrame方法內部分配的,並且在每次更新時它都會恢復自身,因此我只是將此分配移到了構造函數中。 有用。
所以...
public void DrawFrame(SpriteBatch batch, int frame, Vector2 screenPos)
{
Position = screenPos;
int FrameWidth = myTexture.Width / framecount;
Rectangle sourcerect = new Rectangle(FrameWidth * frame, 0, FrameWidth, myTexture.Height);
batch.Draw(myTexture, Position, sourcerect, Color.White, Rotation, Origin, Scale, SpriteEffects.None, Depth);
}
...變成...
public void DrawFrame(SpriteBatch batch, int frame)
{
//Position = screenPos;
int FrameWidth = myTexture.Width / framecount;
Rectangle sourcerect = new Rectangle(FrameWidth * frame, 0, FrameWidth, myTexture.Height);
batch.Draw(myTexture, Position, sourcerect, Color.White, Rotation, Origin, Scale, SpriteEffects.None, Depth);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.