2011-03-04 71 views
2

我正在使用XNA框架C#为Windows Phone制作游戏。你如何在c#中创建一个类?

游戏中的主要玩家必须拍摄。我有一个子弹类,但是如何在每次用户点击屏幕时实例化子弹?

子弹类基本上是自己画的,并有一个叫做“射击”的功能,这是用来让子弹向玩家方向移动。

我在C#中的xD一个小白

+3

我会强烈* *建议你熟悉的C#本身的基础知识作为一门语言,你开始之前XNA。否则,当你遇到问题时,你不会知道它是由XNA还是C#引起的 - 或者别的什么。 – 2011-03-04 17:07:49

+1

如果这不是游戏开发,我通常会同意Jon的观点,并且通过编写游戏来学习一种新的语言非常有趣! – Kynth 2011-03-04 17:24:07

+0

我对基础知识很熟悉,只是课程我不确定。 – apprentice 2011-03-04 18:38:30

回答

2

一个常见的方法是在你的游戏循环中添加一个检查屏幕被触摸并采取行动,如果是。

对于XNA,在游戏类(我认为这是所谓的Game1默认情况下)创建一个字段来存储屏幕是否被感动了上一循环:

bool screenBeingTouched = false; 

这是为了防止多的子弹创建一个单一的触摸(除非这是你想要的)。

然后在游戏类检查的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; 
} 
+0

以及如何添加一个函数在屏幕上显示它? 感谢您的帮助! – apprentice 2011-03-04 17:39:43

+0

有很多方法可以做到这一点,全面的方法是使用精灵。本教程涵盖了触摸屏和渲染的基础知识:http://mobile.tutsplus.com/tutorials/windows/introduction-to-xna-on-windows-phone-7/ – Kynth 2011-03-05 22:02:31

+0

谢谢,我知道现在该做什么,谢谢您的帮助! – apprentice 2011-03-09 21:20:12

3

不要迂腐安德烈但在技术上它是

Bullet mybullet = new Bullet(A, B, C); 
+0

这回答了如何实例化一个类。然而,在XNA框架的背景下还有更多的问题未在此处讨论(尚)。 – Kynth 2011-03-11 16:36:22

1

如果您遇到麻烦实例化一个类,我相信你也不太熟悉内容管道要么,所以假设基本子弹的结构,我会做这样的事情:

要加载一个Texture2D使用这样的代码:

var tx = this.Content.LoadContent<Texture2D>("TextureYouAddedAsContent"); 

我相信你的子弹类有一个构造函数,需要一个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,尤其这question

1

由于这是一个游戏,我建议你不要在实例化对象更新循环。在游戏中你会因为它而遇到非常糟糕的口吃和滞后。

要做到这一点是在游戏的初始化,或在内容加载阶段的方式,是创建一个队列的说,100发子弹:

Queue<Bullet> bulletCache; 

然后填写与100个实例该列表子弹:

for (int i = 0; i < 100; i++) 
    bulletCache.Enqueue(new Bullet()); 

在你的游戏,当你要拍子弹,只是出列其中之一,设置它的速度,位置等,并让它呈现。当它不再可见时(例如碰到某物,走出屏幕边界等),再次入场。

这样你就没有在游戏循环中实例化任何东西,只是回收相同的对象。如果你在游戏中尽可能多地做到这一点,你就会有非常流畅的游戏体验。如果您习惯于在更新循环中创建对象,那么Compact Framework的垃圾收集器(电话上的垃圾收集器)将在某个时刻启动并清除它们,并且会破坏游戏的帧速率。

希望帮助:)

+0

优秀的提示,这有助于我的一些修补,谢谢:) – Kynth 2011-03-07 09:09:48