我在用C#设计视频游戏时遇到了这个问题。
如果我们考虑《战地风云》或《使命召唤》之类的游戏,那么数百枚甚至数千枚子弹会同时飞行。事件是不断触发的,据我所知,这会吸收很多处理能力……或者是吗?我想知道各种游戏开发人员如何管理(2D和3D)项目符号,以及每种方法最有效的方法是什么。
我读了一个问题:如何在视频游戏中模拟子弹?但是从程序设计的角度来看,它没有涉及项目符号的工作方式。
我有几个主意,但每个都有缺点:
我想到的最有效的方法(用于2D游戏):
假设我要创建一个名为Bullet的类,并且用户长时间按住按钮,将每0.01秒创建一个Bullet对象。本项目符号有:
1速度
2从其拍摄的起始位置
3精灵纹理
4命中效果
由于项目符号是其自己的类,因此它可以管理绘图,移动和动作侦听器本身。
在处理器上处理成千上万的实例化实例然后销毁(触发击中效果时)会不会很困难?RAM空间?
3D游戏的有效方法-我的另一个想法是:
可以说我创建了一个武器类。该武器具有多种功能,其中一些功能:
1检测武器瞄准的位置,并确定它是否在瞄准目标
2触发枪声的动画
3有一个doDamage()方法,该方法指示从枪支指向的内容中减去生命值
4按下按钮时通知项目符号动画类
然后,我可以创建一个静态类,例如BulletAnimation,它可以从触发它的枪支所在的位置,该枪支指向的位置(用于子弹目的地)获取通知,以及有关用于子弹的适当精灵和速度的信息。然后,此类根据位置和所需的精灵绘制精灵(在新线程上,可能是idk),以模拟从枪支发射的子弹。
后者似乎更难编写代码,并且要不断地调用静态函数一次执行成千上万的子弹,是否需要大量处理能力?获取开始位置和结束位置的持续更新也很困难。
我的问题是,游戏创作者最有效的方法是什么?这种方法会从2D游戏变为3D游戏吗?
pew-pew-pew
技术来运作:)