主页 > 传奇新闻 >

游戏编程中的设计模式

发布时间:2019-05-20 15:42

前言在我们开始之前,你应该知道关于设计模式的权威书籍是什么?设计模式:可重用面向对象软件的元素。我的免责声明是,我只是计算机科学的学生......不要把我的话当作最终的全部。这篇文章(就像我的许多文章一样)只是这个主题的一个划痕。话虽如此......让我们继续前进。

动机
这是我一直在努力解决的话题。我们知道,在面向对象编程中,设计模式是我们遇到的问题的真正解决方案。但是,我们通常不使用设计模式来解决问题,我们通常在不知情的情况下使用它们,或者因为它似乎是个好主意而且我们被教导要这样做。这可能是好的,因为它可以帮助我们避免问题,但它同时掩盖了我们(在不知不觉中)避免的问题,并且难以理解模式存在的原因,或者为什么我们选择一种模式而不是另一种模式。
<什么是设计模式
设计模式是广义问题的通用解决方案,当您使用面向对象编程范例创建软件时,这些问题会以一些频率发生。

为什么使用设计模式
最基本和居高临下的答案是:因为这些解决方案已经存在了相当长的时间,并且许多专家已经使用过它们,它们可能比您自己想出的任何解决方案都要好。即使你自己想出了一个解决方案,它可能已经在某种程度上成为一种设计模式。了解上下文相关的设计模式有助于您做出良好的架构和设计决策。

常见的游戏编程模式
Singleton? - 您创建的对象确保一次只能存在一个实例。在我的游戏Total Toads中,这是使用的设计模式,因为它最容易适应cocos2d的设计。例如,在cocos2d中,有一个Singleton CCDirector,CCSpriteFrameCache等。这似乎是游戏编程中经常使用的灵丹妙药。虽然普遍的共识似乎是它不是灵丹妙药,因为它实际上掩盖了设计不良的建筑。如果可以的话,您应该避免使用此设计模式,因为可能有更好的方法来设计游戏的体系结构。这可以避免具有多个对象实例的问题,其中应该只有一个对象,例如单个玩家游戏中的“玩家”对象。工厂? - 你创建一个对象?它的目的是创建其他对象。例如,您可以使用一个名为“GameObjectFactory”的工厂类,使用静态(可能是参数化)方法来创建其他游戏对象,如“玩家”,“敌人”,“枪”或“子弹”。后面的类可能具有复杂的构造,使得难以获得该特定类的实例。工厂可以处理对象的复杂配置(添加到对象池,添加到物理引擎等),并简单地返回对创建的对象的引用。此模式通过将这些复杂配置保存在单个位置而不是分散在代中,可帮助您避免复杂对象实例化的问题。观察者? -&#20256;&#22855;1.85&#25163;& 有问题的对象维护一个对其状态感兴趣的其他对象的列表,并通知这些监听对象其状态的变化。在Total Toads中,我们有3个Frog对象和3个FrogAnimation对象,可以根据状态控制青蛙的动画。在这种情况下,FrogAnimation对象是Frog对象的观察者。每次青蛙的状态变量发生变化时,它都会通知相关的FrogAnimation对象注意新状态,并在必要时采取行动(如动画青蛙)。此模式可帮助您避免游戏中的事件通知问题。由于游戏是用户交互驱动的,因此对象几乎可以随时改变状态。当一个对象经常改变状态时,该对象需要被动画化或让其他对象相对于新状态改变它们的状态。状态? - 你有一个抽象(空实现)类,它有子类来定义当前状态。这方面的一个例子可能是具有“玩家”类的第一人称射击游戏,其具有几种可能的状态,例如“PlayerInCombat”,“PlayerOutOfCombat”和“PlayerInMenu”。当状态改变时,玩家应被表示为适当的州级的实例。当玩家开始被击中时,玩家对象“切换”到PlayerInCombat类的实例以利用该类的鼠标左键单击的实现,这使得玩家能够射击他们的枪。类似地,对于“PlayerOutOfCombat”和“P前言在我们开始之前,你应该知道关于设计模式的权威书籍是什么?设计模式:可重用面向对象软件的元素。我的免责声明是,我只是计算机科学的学生......不要把我的话当作最终的全部。这篇文章(就像我的许多文章一样)只是这个主题的一个划痕。话虽如此......让我们继续前进。

动机
这是我一直在努力解决的话题。我们知道,在面向对象编程中,设计模式是我们遇到的问题的真正解决方案。但是,我们通常不使用设计模式来解决问题,我们通常在不知情的情况下使用它们,或者因为它似乎是个好主意而且我们被教导要这样做。这可能是好的,因为它可以帮助我们避免问题,但它同时掩盖了我们(在不知不觉中)避免的问题,并且难以理解模式存在的原因,或者为什么我们选择一种模式而不是另一种模式。
<什么是设计模式
设计模式是广义问题的通用解决方案,当您使用面向对象编程范例创建软件时,这些问题会以一些频率发生。

为什么使用设计模式
最基本和居高临下的答案是:因为这些解决方案已经存在了相当长的时间,并且许多专家已经使用过它们,它们可能比您自己想出的任何解决方案都要好。即使你自己想出了一个解决方案,它可能已经在某种程度上成为一种设计模式。了解上下文相关的设计模式有助于您做出良好的架构和设计华夏传奇1.76黑暗版决策。

常见的游戏编程模式
Singleton? - 您创建的对象确保一次只能存在一个实例。在我的游戏Total Toads中,这是使用的设计模式,因为它最容易适应cocos2d的设计。例如,在cocos2d中,有一个Singleton CCDirector,CCSpriteFrameCache等。这似乎是游戏编程中经常使用的灵丹妙药。虽然普遍的共识似乎是它不是灵丹妙药,因为它实际上掩盖了设计不良的建筑。如果可以的话,您应该避免使用此设计模式,因为可能有更好的方法来设计游戏的体系结构。这可以避免具有多个对象实例的问题,其中应该只有一个对象,例如单个玩家游戏中的“玩家”对象。工厂? - 你创建一个对象?它的目的是创建其他对象。例如,您可以使用一个名为“GameObjectFactory”的工厂类,使用静态(可能是参数化)方法来创建其他游戏对象,如“玩家”,“敌人”,“枪”或“子弹”。后面的类可能具有复杂的构造,使得难以获得该特定类的实例。工厂可以处理对象的复杂配置(添加到对象池,添加到物理引擎等),并简单地返回对创建的对象的引用。此模式通过将这些复杂配置保存在单个位置而不是分散在代中,可帮助您避免复杂对象实例化的问题。观察者? - 有问题的对象维护一个对其状态感兴趣的其他对象的列表,并通知这些监听对象其状态的变化。在Total Toads中,我们有3个Frog对象和3个FrogAnimation对象,可以根据状态控制青蛙的动画。在这种情况下,FrogAnimation对象是Frog对象的观察者。每次青蛙的状态变量发生变化时,它都会通知相关的FrogAnimation对象注意新状态,并在必要时采取行动(如动画青蛙)。此模式可帮助您避免游戏中的事件通知问题。由于游戏是用户交互驱动的,因此对象几乎可以随时改变状态。当一个对象经常改变状态时,该对象需要被动画化或让其他对象相对于新状态改变它们的状态。状态? - 你有一个抽象(空实现)类,它有子类来定义当前状态。这方面的一个例子可能是具有“玩家”类的第一人称射击游戏,其具有几种可能的状态,例如“PlayerInCombat”,“PlayerOutOfCombat”和“PlayerInMenu”。当状态改变时,玩家应被表示为适当的州级的实例。当玩家开始被击中时,玩家对象“切换”到PlayerInCombat类的实例以利用该类的鼠标左键单击的实现,这使得玩家能够射击他们的枪。类似地,对于“PlayerOutOfComb传奇私服m2是什么 免费at”和“P

上一篇:SpeedTree Foliage Middleware宣布推出PS3支持

下一篇:GameSpot的PAX Prime通过赠品官方规则

相关内容