簡體   English   中英

XNA-無法更改精靈位置(通過鍵盤輸入將其移動)

[英]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方法中更改該類變量。 您不必將其他參數添加到DrawFrameUpdateFrame ,您已經擁有所需的內容。

編輯

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM