小编Ant*_*n B的帖子

在游戏开发中处理状态和状态变化的好技术是什么?

我是一名经验丰富的游戏开发开发人员,我制作了一个相当简单但工作正常的3D平台游戏,并且正在寻找使架构更具可扩展性的方法.

在游戏开发中处理状态的好方法是什么?
一个非常天真的方法是有多个布尔值,如:

time_stopped = True
time_slow_motion = False
level_loaded = True
level_paused = True
level_completed = False
Run Code Online (Sandbox Code Playgroud)

这是非常不灵活,因为开发人员的错误可能会导致time_stopped = Truetime_slow_motion = True在同一时间,这会破坏游戏的逻辑.

我正在寻找一个更好的方法:

class TimeState:
    STOPPED = 0
    SLOW_MOTION = 1
    NORMAL = 2
    current_state = 0

    def isStopped(self):
        if current_state == self.STOPPED: return True
Run Code Online (Sandbox Code Playgroud)

但是我如何以一种好的方式处理多组国家?我可以创建一个LevelState其中有LOADED,PAUSEDCOMPLETED状态.但是,如何处理重叠组,比如何时LevelStateTimeState PAUSED应该始终相同?如何解决国家管理是否有良好的设计模式或良好实践?

处理状态变化的好方法是什么?
我的想法是要么给出状态对象,例如.LevelState回调函数在任何给定的状态更改时执行 - 或者在每个游戏循环中轮询状态对象if level_state.changedTo() == LevelState.COMPLETED: doStuff().有没有更好的方法来处理这个?消息队列/事件?我不想将逻辑嵌入到状态对象中.
我也有兴趣在如果要同时处理changedFromchangedTo …

language-agnostic architecture design-patterns state-machine

8
推荐指数
1
解决办法
2618
查看次数

可选的静态类型是否有利于Python API设计或者是一个缺点?(包括类型检查装饰器示例)

我是一名长期的Python开发人员,我非常喜欢该语言的动态特性,但我想知道Python是否会受益于可选的静态类型. 能够将静态类型应用于库的API是否有益,这会带来什么缺点?

我快速勾勒出一个在pastebin上实现运行时静态类型检查的装饰器,它的工作原理如下:

# A TypeError will be thrown if the argument "string" is not a "str" and if 
# the returned value is not an "int"
@typed(int, string = str)
def getStringLength(string):
    return len(string)
Run Code Online (Sandbox Code Playgroud)

在库的API函数上使用这样的装饰器是否可行?在我的观点中,在库的域特定模块的内部工作中不需要类型检查,但是在库和它的客户端之间的连接点上,通过应用类型检查的合同设计的简单版本可能是有用的.特别是作为一种强制文档,它明确向库的客户说明它期望和返回的内容.

这样例子,其中addObjectToQueue()isObjectProcessed()暴露于由客户端使用和processTheQueueAndDoAdvancedStuff()是一个内部库函数.我认为类型检查对于面向外的函数可能很有用,但如果在内部函数上使用,它只会膨胀并限制python的动态性和有用性.

# some_library_module.py

@typed(int, name = string)
def addObjectToQueue(name):
    return random.randint() # Some object id

def processTheQueueAndDoAdvancedStuff(arg_of_library_specific_type)
    # Function body here

@typed(bool, object_id = int)
def isObjectProcessed(object_id):
    return True
Run Code Online (Sandbox Code Playgroud)

使用这种技术的缺点是什么?我的天真实现对pastebin的缺点是什么?

我不希望答案讨论将Python转换为静态类型语言的问题,而是关于API设计特定优缺点的想法.(如果您认为这不是问题,请将其移至programmers.stackexchange.com)

python static-typing

3
推荐指数
1
解决办法
370
查看次数