当前位置:   article > 正文

[Python sdl2] 几个实现的对比_pygame_sdl2

pygame_sdl2

前言

之前我写了一篇文章,当时写得急,没有怎么求证,现在写一篇弥补一下。

各个介绍

Pygame

最有名的版本啊,去搜,网上能找到几百篇关于它的教程。最新版本是2.x,1.x是基于SDL1的,2.x基于SDL2,支持python3.6+。
安装:pip install pygame
被称为SDL最好的绑定之一:
hhh

Pysdl2

这个就比较陌生了,它为了代替Pysdl项目(没找到此项目),是使用纯ctypes调用dll的方式来做游戏的。作者有配套包Pysdl2-dll可以使用。使用时可以用sdl2.ext来“Pythonic地调用”
安装:pip install pysdl2-dll然后pip install pysdl2
因为是调用dll,不需要编译pyd,支持python2,3的所有版本
sdl2.examples中有示例。

import sys
import ctypes
import sdl2dll              # 导入pysdl2-dll
from sdl2 import *          # 导入pysdl2
from sdl2.sdlimage import * # 加载图片需要,否则只能加载BMP

def main():
    SDL_Init(SDL_INIT_VIDEO)
    IMG_Init(IMG_INIT_JPG)
    window = SDL_CreateWindow(b"Hello World",
                              SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
                              592, 460, SDL_WINDOW_SHOWN)
    windowsurface = SDL_GetWindowSurface(window)

    image = IMG_Load(b"exampleimage.jpg")
    rect = SDL_Rect(0,0,0,0)
    SDL_BlitSurface(image, None, windowsurface, rect)

    #SDL_RenderCopyEx(window,image,None,None,90.0,SDL_Point(0,0),SDL_FLIP_NONE)
    cur = SDL_Cursor()
    cur =  SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_HAND)
    sur = SDL_Surface()
    cur = SDL_CreateColorCursor(image,0,0)
    SDL_SetCursor(cur)

    SDL_UpdateWindowSurface(window)
    SDL_FreeSurface(image)

    running = True
    event = SDL_Event()
    while running:
        while SDL_PollEvent(ctypes.byref(event)) != 0:
            if event.type == SDL_QUIT:
                running = False
                break

    SDL_DestroyWindow(window)
    SDL_Quit()
    return 0

if __name__ == "__main__":
    sys.exit(main())

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

这个示例会读取本地exampleimage.jpg并画到屏幕,顺便把鼠标样式。。。自己看吧。

pygame_sdl2

看上去像上两者的混合体?没错,这是github@renpytom 等人写的,使用pysdl2,并且“仿”成pygame的用法。需要自己编译,编译需要cython(这个需要vc14),windows上需要pygame_sdl2_windeps。最新版支持python3。

之前我说pygame不能输入的错了,是2.0.0前不能,用SDL2后就可以了。

对比

安装

这个比较不好比
Pygame只需要一行pip
PySdl2需要两行pip
而pygame-sdl2。。。需要自己编译

活跃度

这个没法比的,Pygame>pysdl2~pygame_sdl2

文档完善程度

这个还是pygame赢了,pygame_sdl2最坑:
hhh

而pysdl2,建议看Ctypes(DLL交互)SDL wiki(就是C++原版)反正样子都一样。

安卓

pysdl2躺平
pygame 可以用kivy的p4a pip install python-for-android弄成安卓的只支持Linux打包
pygame_sdl2 可以用rapt只支持py2.7

其他平台

pysdl2再次躺平
pygame躺平
pygame_sdl2支持windows,linux,mac,android,ios,wasm(web):
hhh
牛B。

最后

如果要稳定开发,建议pygame;
如果要速度,并且是C++转的,可以用pysdl2;
如果要多平台且头发够的,可以考虑pygame_sdl2。

本文发于CSDN于 2022/3/30 18:52

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/303600
推荐阅读
相关标签
  

闽ICP备14008679号