0

私は、私の個人的な Python プロジェクトのために、単純な (そう思った) スターフィールド アニメーションを書きました。ゲームが「遊べる」段階になったちょうどその頃、私は別のプロジェクトに着手することにしました。Windows/Ubuntu デュアルブートの実験。Windows/Ubuntu の実験の詳細は実際のページめくりですが、関連する問題は「なぜこのコードは Windows XP では問題なく動作するのに、Ubuntu 12.04 ではあらゆる種類のクラッシュを引き起こすのか」ということです。

このコードは、Pygame 1.9 を使用して Python 2.7 用に作成されました。

import pygame, random, sys
from pygame import *

pygame.init()

width = 400
height = 400
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)


DISPLAYSURF = pygame.display.set_mode((width, height))

stars = 50
starfield = []

for i in range(stars):
    x = random.randrange(0, width)
    y = random.randrange(0, height)
    starfield.append([x, y])

clock = pygame.time.Clock()
FPS = 60

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
           pygame.quit()
           sys.exit()

DISPLAYSURF.fill(BLACK)

starCounter = 0
for star in starfield:
    starCounter += 1
    x, y = star
    starDraw = pygame.PixelArray(DISPLAYSURF)
    starDraw[x][y] = WHITE
    del starDraw

            #fake parallax scrolling effect
    star[1] += 1
    if starCounter % 3 == 1:
        star[1] += 1

    if starCounter % 5 == 1:
        star[1] += 1

    if star[1] > height:
        star[0] = random.randrange(0, width)
        star[1] = 0

最終的に、PixelArray のナンセンスを surface.set_at() に置き換え、PixelArray オブジェクトのインスタンス化に関連するすべてのコードを削除することで、これを解決しました。しかし、それはセグメンテーション違反 (Pygame パラシュートの種類) だけではありませんでした。あらゆる種類の奇妙なエラー メッセージが表示されました。gcclibrary に関するもの、malloc() に関するものなど。以前は IDLE などを使用していなかったことに注意してください。私はいつもコマンドラインやターミナルからすべてを実行しています。

私が経験していた種類のエラーは、必ずしも私には関係ありません。Ubuntuが喜んで彼らを指差して笑っている間、Windowsは彼らを黙らせるだけだったという事実はそうです。明らかに、これは PEBKAC の結果であるに違いありませんが、一体なぜ Windows がその情報を私から隠しているのでしょうか? そして、この議論の裏返しです。Ubuntuでのコーディングは、別の種類の悪い習慣を許しますか? Windows が特定の種類の segfault を黙らせる場合、Ubuntu は別のエラー セットをキャッチしますか? また、すべての主要な OS がキャッチするかどうかを決定する可能性のあるさまざまなグーフボール エラーすべてに注意する必要がありますか? 私はこれに約1年しか参加していないので、露出不足で気づいていない情報がたくさんあります.

つまり、PixelArray オブジェクトを作成する必要があると感じた場合に備えて、古いコードのエラーを表示したい場合は、それも気にしません。:)

4

1 に答える 1

1

あなたが提供したコードは、私のマシン (Ubuntu 11.10、Python 2.7.2) でクラッシュすることなく動作します。ブロックをコメントアウトしてwhile True、後のコード (PixelArrayなど) が実行されるようにしても機能します。表示ループなどがないため、黒いウィンドウが短時間ポップアップする以外は何も表示されませんが、例外はありません。

Windows での Python はセグメンテーション違反などを隠しません。Ubuntu のセットアップに何か問題があります。次の3つのいずれかだと思います。

  1. Ubuntu マシンの Python インストールが破損しています。
  2. pygame (または関連ライブラリ) のインストールが破損しています。
  3. コンパイルされたコードの一部が Windows からコピーされており、Ubuntu で実行すると問題が発生します (実行を開始してから問題が発生するのではなく、完全に実行を拒否すると予想されるため、可能性は低いですが、私はそれをそこに投げ出しています。万一に備えて)。

質問を編集してエラーの完全なトレースバックを含めると、どこが壊れているかを誰かが特定できる可能性があります。

于 2012-07-14T23:21:08.983 に答える