2013-03-24 64 views
2

我嘗試使用以下setup.py:cx_Freeze不會與pygame的工作(已經嘗試過 「進口pygame._view」)

from cx_Freeze import setup, Executable 
exe = Executable(
script="stars.pyw", 
) 

setup(
    executables = [exe] 
    ) 

要建立以下pygame的例子:

import random, math, pygame 
import pygame._view 
from pygame.locals import * 

#constants 
WINSIZE = [640, 480] 
WINCENTER = [320, 240] 
NUMSTARS = 150 


def init_star(): 
    "creates new star values" 
    dir = random.randrange(100000) 
    velmult = random.random()*.6+.4 
    vel = [math.sin(dir) * velmult, math.cos(dir) * velmult] 
    return vel, WINCENTER[:] 


def initialize_stars(): 
    "creates a new starfield" 
    stars = [] 
    for x in range(NUMSTARS): 
     star = init_star() 
     vel, pos = star 
     steps = random.randint(0, WINCENTER[0]) 
     pos[0] = pos[0] + (vel[0] * steps) 
     pos[1] = pos[1] + (vel[1] * steps) 
     vel[0] = vel[0] * (steps * .09) 
     vel[1] = vel[1] * (steps * .09) 
     stars.append(star) 
    move_stars(stars) 
    return stars 


def draw_stars(surface, stars, color): 
    "used to draw (and clear) the stars" 
    for vel, pos in stars: 
     pos = (int(pos[0]), int(pos[1])) 
     surface.set_at(pos, color) 


def move_stars(stars): 
    "animate the star values" 
    for vel, pos in stars: 
     pos[0] = pos[0] + vel[0] 
     pos[1] = pos[1] + vel[1] 
     if not 0 <= pos[0] <= WINSIZE[0] or not 0 <= pos[1] <= WINSIZE[1]: 
      vel[:], pos[:] = init_star() 
     else: 
      vel[0] = vel[0] * 1.05 
      vel[1] = vel[1] * 1.05 


def main(): 
    "This is the starfield code" 
    #create our starfield 
    random.seed() 
    stars = initialize_stars() 
    clock = pygame.time.Clock() 
    #initialize and prepare screen 
    pygame.init() 
    screen = pygame.display.set_mode(WINSIZE) 
    pygame.display.set_caption('Stars') 
    white = 255, 240, 200 
    black = 20, 20, 40 
    screen.fill(black) 

    #main game loop 
    done = 0 
    while not done: 
     draw_stars(screen, stars, black) 
     move_stars(stars) 
     draw_stars(screen, stars, white) 
     pygame.display.update() 
     for e in pygame.event.get(): 
      if e.type == QUIT or (e.type == KEYUP and e.key == K_ESCAPE): 
       done = 1 
       break 
      elif e.type == MOUSEBUTTONDOWN and e.button == 1: 
       WINCENTER[:] = list(e.pos) 
     clock.tick(50) 


# if python says run, then we should run 
if __name__ == '__main__': 
    main() 
pygame的-1.9.2pre.win-AMD64-py3.3.exe

但腳本作品在編譯之前就好:

它說我使用pygame的非官方版本是很重要的。

+0

當您說它不起作用時:您嘗試了什麼,發生了什麼? – 2013-03-24 10:44:41

+0

當我使用「python setup.py build」編譯它時,構建軟件(stars.exe)將不會打開。順便說一句,我使用Python 3.3,Pygame 1.9.2和cx_freeze 4.3.1,所有x64。 – 2013-03-24 18:40:38

+0

好吧,當它不能打開時,你是否收到任何類型的錯誤信息?如果您通過雙擊運行它,請嘗試從命令行運行它,因爲有時窗口會在您看到錯誤之前關閉。 – 2013-03-24 18:51:43

回答

4

轉貼作爲一個答案:

這就是我們偶爾看到一個錯誤,但還沒有得到全面修復呢。您可以通過在腳本中添加一行來解決該問題:

import re