Python 和 Pygame 是学习 SDL 的好方式吗?

18
如果我未来想转向C++和SDL,那么学习Python和pygame是否是学习SDL的好方法?
9个回答

15

使用Python+PyGame来学习SDL技术是一个非常不错的主意。

我用这种方式写了一款相当受欢迎的游戏。相比于其他语言中的SDL绑定,Python/PyGame似乎更为先进,与C++相比的一个巨大优势是无需编译代码,只需进行简单的修改即可甚至能够编辑运行中的程序并实时查看反馈,这将带来巨大的差异,就像使用GUI矢量图形程序而不是在文本编辑器中编写SVG。不幸的是,你无法直接得到这个功能,因为需要对程序进行一些调整才能看到它。

至于PyGame的其他优点,jrpg在Linux、Windows和OSX上只需要进行少量更改就可以运行。尽管在全屏模式切换和双缓冲方面需要进行一些调整,因为不同的操作系统之间存在一些差异,但不需要重新编译程序。如果你遇到任何问题,你可以获得完善的回溯信息,并实时调试你的问题,而这在C++中一旦出现内存损坏或段错误就是不可能的。

我不太清楚在SDL游戏中混合使用C++和Python有多容易或有多难。我认为这不可能太难,因为PyGame是一个非常直观但非常精美的SDL封装器,并且Python/C++混编应该足够简单。


2
链接似乎无法使用(404)。 - SwiftsNamesake
相信新的正确链接是这个:https://taw.github.io/jrpg/ - ZN13

6

Pygame在很大程度上抽象了SDL接口,因此我认为没有太多的优势。


6

你可以在基于SDL的环境中学习一些技巧、实现游戏逻辑等,但是当你转向C++/SDL后,你将不得不直接使用SDL函数,来自pyGame的辅助函数/对象将完全无用。


6
是的。如果你比较擅长Python而不是C++,那么学习Pygame可能是个好主意。当你转向使用SDL和C时,你需要进行一些翻译工作,但这应该是一个比较一对一的映射过程。

3
当然可以。您可以在很短的时间内编写一个sdl游戏或工具。
您可以从以下代码开始,将数据/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很快,你可以用它制作复杂的游戏。


3

根据您的目的,PySDL2比pygame更好。它几乎直接导入了SDL2 API。


1

如果你的目标是OpenGL,可以尝试使用pyglet。它比pygame更好地设计了库。

但是,如果你想将来转向C++和SDL,请现在就开始学习。这样你就能真正学会SDL。但在做出这种不负责任的决定之前,最好先了解一下pyglet。因为无论你的库有多糟糕,在C++中正确地设计应用程序也很重要。


1

Python不会阻止你学习设计,这是我认为更重要的事情,我正在使用Pygame制作一个Smash Bros克隆版,我在设计方面学到了很多东西。同时,你也会学会不写太多次优代码,Python也有巧妙而美丽的技巧。


0

我不会认为Python(或任何受控或解释语言)是学习任何复杂任务的好方法,因为它使程序员与系统的工作过程隔离太多。正如我的一位朋友所说:“Python爱你并希望你快乐。”如果你已经知道了基本原理,那么这一切都很好。但如果你想要“学习”,最后你想要的不是一种能为你完成所有工作的语言。

你会很快地学到“什么”,但不会学到“为什么”。当某些事情出现问题时(在任何非微不足道的项目中肯定会遇到),你将毫无头绪地不知所措。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接