簡體   English   中英

您如何在c#中實例化一個類?

[英]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.

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