2016-05-04 2 views
0

Обзор: я создал небольшой скрипт Minecraft'like поколения с Python и Panda3D, я положил его на нитку, так что я могу использовать Time.Sleep() и другие функции, но любые идеи, почему поток падает?Panda3D Python пронизывающие аварии

Что я сделал: Я создал небольшой скрипт Minecraft'like поколения с Python и Panda3D.

Проблема: Я не могу использовать резьбу с Panda3D.

Здесь является все код, который я создал:

from direct.showbase.ShowBase import ShowBase 
from panda3d.core import * 
import perlin, colorsys, time 
import thread 

scaleX = 0.05 
scaleZ = 0.05 
blockSize = 1 
size = 16 
bottom = -70 



waiter = 0.001 

sn = perlin.SimplexNoise() 

def threaded_generator(): 
    for x in range(size): 
      for z in range(size): 
        time.sleep(waiter) 
        y = sn.noise2(x*scaleX, z*scaleZ) 
        # Load the environment model. 
        cube = loader.loadModel("Test") 
        # Reparent the model to render. 
        cube.reparentTo(render) 
        # Apply scale and position transforms on the model. 
        cube.setScale(blockSize, blockSize, blockSize) 
        cube.setPos(x*blockSize, z*blockSize, round(y)) 
        cy = round(y) 
        while cy > bottom: 
         cy -= 1 
         cube = loader.loadModel("Test") 
         # Reparent the model to render. 
         cube.reparentTo(render) 
         # Apply scale and position transforms on the model. 
         cube.setScale(blockSize, blockSize, blockSize) 
         cube.setPos(x*blockSize, z*blockSize, round(cy)) 


class MyApp(ShowBase): 

    def __init__(self): 
     ShowBase.__init__(self) 
     #Ambient 
     alight = AmbientLight('alight') 
     alight.setColor(VBase4(0.2, 0.2, 0.2, 1)) 
     alnp = render.attachNewNode(alight) 
     render.setLight(alnp) 
     #Directional 
     dlight = DirectionalLight('dlight') 
     dlight.setColor(VBase4(0.8, 0.8, 0.5, 1)) 
     dlnp = render.attachNewNode(dlight) 
     dlnp.setHpr(0, -60, 0) 
     render.setLight(dlnp) 
     #Cubes 
     print("Ding!") 
     thread.start_new_thread(threaded_generator,()) 

app = MyApp() 
app.run() 

Для меня это начинает генерировать немного,

, то он останавливается, не кажется, заканчивается, иногда он останавливается довольно быстро, а иногда он останавливается через несколько секунд.

~ Coolq :)

+0

Звучит круто, но пока у меня нет на самом деле нет Panda3D установки на моем компьютере, я не могу test it :( – linusg

+0

Нет проблем! Было уже поздно, когда я отправил это, извините! –

ответ

0

От Panda3D manual вы должны использовать темы, предоставляемые из Panda3D, обусловленно базовой структуры гр ++.

Проверка для потоков:

from panda3d.core import Thread 
print Thread.isThreadingSupported() 

Использование нити

# WRONG: 
import thread 
# RIGHT: 
from direct.stdpy import thread 

Использование многопоточности

# WRONG: 
import threading 
# RIGHT: 
from direct.stdpy import threading 
# ALSO RIGHT: 
from direct.stdpy import threading2 as threading 
+0

Thank y ou так много! Очень признателен! Надеюсь, это также поможет другим :) –

Смежные вопросы