[英]how do you instanciate a class in c#?
我正在使用XNA框架C#為Windows Phone制作游戲。
游戲中的主要玩家必須射擊。 我有一個項目符號類,但是如何在用戶每次單擊屏幕時實例化該項目符號?
子彈類基本上是自己繪制的,並具有稱為“射擊”的功能,該功能用於子彈沿玩家的方向移動。
我是C#xD的菜鳥
並不是對Andrey的痴迷,但從技術上講,它是
Bullet mybullet = new Bullet(A, B, C);
一種常見的方法是在游戲循環中添加對被觸摸屏幕的檢查,如果有,請采取措施。
對於XNA,在Game類(我認為默認情況下稱為Game1
)上創建一個字段來存儲是否在先前的Loop上觸摸了屏幕:
bool screenBeingTouched = false;
這是為了防止一次觸摸即可創建多個項目符號(除非您要這樣做)。
然后在Game類的Update
方法中檢查當前是否正在觸摸屏幕並采取措施:
TouchCollection newScreenTouches = TouchPanel.GetState();
if (!screenBeingTouched && newScreenTouches.Count > 0)
{
screenBeingTouched = true;
Bullet myBullet = new Bullet();
myBullet.DoSomething(); // Such as render on the screen and move around.
}
else if (newScreenTouches.Count == 0)
{
screenBeingTouched = false;
}
如果您在實例化類時遇到麻煩,我想您也不熟悉Content Pipeline,因此假設基本的項目符號結構,我將執行以下操作:
要加載Texture2D,請使用如下代碼:
var tx = this.Content.LoadContent<Texture2D>("TextureYouAddedAsContent");
我假設您的Bullet類具有一個接受Texture2D和其他參數的構造函數,請使用如下代碼實例化它:
int speed = 500;
Vector2 pos = new Vector2(50, 50); // start at 50, 50, top left
Vector2 dir = new Vector2(1, 0); // direction is in positive X direction
Bullet bullet = new Bullet(tx, pos, dir, speed);
另外,請檢出http://GameDev.StackExchange.com ,尤其是這個問題 。
由於這是一個游戲,因此建議您不要在Update循環期間實例化對象。 因此,您會在游戲過程中遇到非常嚴重的口吃和滯后現象。
您要做的方法是在游戲初始化時或在內容加載階段中,創建一個包含100個子彈的隊列:
Queue<Bullet> bulletCache;
然后在列表中填充100個bullet實例:
for (int i = 0; i < 100; i++)
bulletCache.Enqueue(new Bullet());
在您的游戲中,當您需要發射子彈時,只需使其中之一出隊,設置其速度,位置等,然后進行渲染即可。 當它不再可見時(例如,撞到某物,超出屏幕范圍等),再次使其入隊。
這樣,您無需實例化游戲循環中的任何內容,而只是回收相同的對象。 如果您在游戲中盡可能多地進行此操作,您將擁有非常流暢的游戲玩法。 如果您習慣在更新循環中創建對象,那么緊湊框架(電話上的那個)的垃圾收集器將在某個時候啟動以清理它們,並破壞游戲的幀速率。
希望有幫助:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.