如果我将来想转向 C++ 和 SDL,Python 和 pygame 是不是学习 SDL 的好方法?
9 回答
Python+PyGame 是学习 SDL 的好主意。
我就是这样写了一个有点流行的游戏。Python/PyGame 似乎比 SDL 绑定到任何其他语言要先进得多,与 C++ 相比的一个巨大优势是不必编译代码,并且通过一些简单的黑客攻击甚至可以修改正在运行的程序,并实时查看反馈。它产生了巨大的差异 - 就像使用 GUI 矢量图形程序与在文本编辑器中编写 SVG 一样。不幸的是,您并没有开箱即用,因为您需要稍微调整您的程序才能看到它。
至于 PyGame 的其他优点,jrpg 在 Linux、Windows 和 OSX 上运行的变化非常小。我不得不对全屏模式切换和双缓冲进行一些调整,因为操作系统之间存在一些差异,但不需要重新编译。如果您有任何问题,您可以获得良好的堆栈跟踪并实时调试您的问题,一旦您遇到内存损坏或段错误,这对于 C++ 来说是不可能的。
我真的不知道为您的 SDL 游戏混合 C++ 和 Python 有多容易或多难。我认为这不会太难,因为 PyGame 是一个非常简单但制作精良的 SDL 包装器,并且 Python/C++ 混合应该很容易。
pygame 对 SDL 接口进行了相当多的抽象,因此我认为没有太多优势。
您可以在基于 SDL 的环境中学习一些技术、实现游戏逻辑的方法等,但是在迁移到 C++/SDL 之后,您将不得不直接使用 SDL 函数,pyGame 中的辅助函数/对象将完全无用。
是的。如果 python 对您来说比 C++ 更自然,那么首先学习 pygame 可能是个好主意。迁移到使用 SDL 和 C 时,您必须经历一个转换过程,但它应该是或多或少的一对一映射。
当然。您可以在更短的时间内编写 sdl 游戏或工具。
您可以从将 data/chimp.bmp 显示为 468x60 屏幕的代码开始:
import pygame, sys,os
from pygame.locals import *
pygame.init()
window = pygame.display.set_mode((468, 60))
pygame.display.set_caption('Monkey Fever')
screen = pygame.display.get_surface()
monkey_head_file_name = os.path.join("data","chimp.bmp")
monkey_surface = pygame.image.load(monkey_head_file_name)
screen.blit(monkey_surface, (0,0))
pygame.display.flip()
def input(events):
for event in events:
if event.type == QUIT:
sys.exit(0)
else:
print event
while True:
input(pygame.event.get())
当您熟悉 SDL 对象时,您可以轻松迁移到 C++(如果您想再次使用:p Pygame 速度很快,您可以用它制作复杂的游戏)。
出于您的目的,PySDL2比 pygame 更好。它几乎直接导入 SDL2 API。
python 不会阻止你学习设计,这对于学习 IMO 来说是更重要的事情,我正在用 pygame 做一个粉碎兄弟克隆,我在设计方面学到了很多东西。然而,你也将学会不要编写太多次优代码,python 也有聪明而漂亮的 hack。
我不会认为 Python(或任何托管或解释语言,就此而言)是学习任何复杂任务的好方法,因为它使程序员与系统的工作隔离了太多。正如我的一个朋友所说,“Python 爱你,希望你快乐。” 如果您已经了解基础知识,那一切都很好,但是如果您想学习,那么您最不想要的就是一种可以为您完成所有工作的语言。
您将很快了解什么,但不是为什么,然后当出现严重错误时(最终会在任何不平凡的项目中),您将不知道发生了什么或为什么。