将来 C++ と SDL に移行したい場合、Python と pygame は SDL を学ぶ良い方法ですか?
9 に答える
Python+PyGame は、SDL を学習するための非常に優れたアイデアです。
私はそのようにやや人気のあるゲームを書きました。Python/PyGame は、他の言語への SDL バインディングよりもはるかに高度に見えます。また、C++ と比較した大きな利点の 1 つは、コードをコンパイルする必要がないことです。簡単なハッキングで、実行中のプログラムを変更して、フィードバックをライブで確認することもできます。GUI ベクトル グラフィックス プログラムを使用する場合と、テキスト エディターで SVG を記述する場合のように、非常に大きな違いがあります。残念ながら、これを表示するにはプログラムを少し調整する必要があるため、これをそのまま使用することはできません。
PyGame のその他の利点については、jrpg は Linux、Windows、および OSX 上で非常に小さな変更を加えるだけで動作しました。フルスクリーン モードの切り替えと、OS 間にいくつかの違いがあったため、ダブル バッファリングを微調整する必要がありましたが、再コンパイルは必要ありませんでした。問題が発生した場合は、適切なスタック トレースを取得して問題をライブでデバッグできますが、メモリの破損やセグメンテーション違反が発生すると、C++ では実際には不可能です。
SDL ゲームで C++ と Python を混在させることがどれほど簡単か、どれほど難しいか、私にはよくわかりません。PyGame は非常に単純ですが、SDL の非常にうまく作成されたラッパーであり、Python/C++ の混合は十分に簡単であるはずなので、それほど難しくないと思います。
pygame は SDL インターフェイスをかなり抽象化しているため、引き継がれる利点はあまりないと思います。
SDL ベースの環境でいくつかのテクニック、ゲーム ロジックなどを実装する方法を学ぶことができますが、C++/SDL に移行した後は SDL 関数を直接使用する必要があり、pyGame のヘルパー関数/オブジェクトは完全に役に立ちます。
はい。Python が C++ よりもはるかに自然である場合は、最初に pygame を学習することをお勧めします。SDL と C を使用するように移行する場合は、翻訳プロセスを経る必要がありますが、多かれ少なかれ 1 対 1 のマッピングである必要があります。
もちろん。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 は高速で、それを使用して複雑なゲームを作成できます)。
python はデザインの学習を妨げるものではありません。それは IMO を学ぶ上でかなり重要なことです。それでも、次善のコードをあまり書かないようにすることも学びます。python には巧妙で美しいハックもあります。
私は、Python (さらに言えば、マネージ言語またはインタープリター言語) が複雑なタスクを学ぶのに良い方法だとは考えていません。なぜなら、Python はシステムの働きからプログラマーをあまりにも切り離してしまうからです。私の友人が言ったように、「パイソンはあなたを愛し、あなたが幸せになることを望んでいます。」基礎をすでに知っていればそれで十分ですが、学習したい場合は、すべての作業を自動的に行う言語は必要ありません。
何が起こっているかはすぐにわかりますが、その理由はわかりません。そして、何かがひどくうまくいかない場合 (そして、重要なプロジェクトでは最終的にはそうなるでしょう)、何が起こっているのか、その理由はわからないままになります。