使用Python+PyGame来学习SDL技术是一个非常不错的主意。
我用这种方式写了一款相当受欢迎的游戏。相比于其他语言中的SDL绑定,Python/PyGame似乎更为先进,与C++相比的一个巨大优势是无需编译代码,只需进行简单的修改即可甚至能够编辑运行中的程序并实时查看反馈,这将带来巨大的差异,就像使用GUI矢量图形程序而不是在文本编辑器中编写SVG。不幸的是,你无法直接得到这个功能,因为需要对程序进行一些调整才能看到它。
至于PyGame的其他优点,jrpg在Linux、Windows和OSX上只需要进行少量更改就可以运行。尽管在全屏模式切换和双缓冲方面需要进行一些调整,因为不同的操作系统之间存在一些差异,但不需要重新编译程序。如果你遇到任何问题,你可以获得完善的回溯信息,并实时调试你的问题,而这在C++中一旦出现内存损坏或段错误就是不可能的。
我不太清楚在SDL游戏中混合使用C++和Python有多容易或有多难。我认为这不可能太难,因为PyGame是一个非常直观但非常精美的SDL封装器,并且Python/C++混编应该足够简单。
Pygame在很大程度上抽象了SDL接口,因此我认为没有太多的优势。
你可以在基于SDL的环境中学习一些技巧、实现游戏逻辑等,但是当你转向C++/SDL后,你将不得不直接使用SDL函数,来自pyGame的辅助函数/对象将完全无用。
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很快,你可以用它制作复杂的游戏。
Python不会阻止你学习设计,这是我认为更重要的事情,我正在使用Pygame制作一个Smash Bros克隆版,我在设计方面学到了很多东西。同时,你也会学会不写太多次优代码,Python也有巧妙而美丽的技巧。
我不会认为Python(或任何受控或解释语言)是学习任何复杂任务的好方法,因为它使程序员与系统的工作过程隔离太多。正如我的一位朋友所说:“Python爱你并希望你快乐。”如果你已经知道了基本原理,那么这一切都很好。但如果你想要“学习”,最后你想要的不是一种能为你完成所有工作的语言。
你会很快地学到“什么”,但不会学到“为什么”。当某些事情出现问题时(在任何非微不足道的项目中肯定会遇到),你将毫无头绪地不知所措。