Hi! I want to create a project with UPBGE using only a python script and without using any logic brick.
I’m using UPBGE 0.30.0 Alpha (based on Blender 2.92.0 Alpha).
I followed this tutorial:
and I created this main.py script inside blender text editor (the blender file is named test.blend):
#! bpy
import bge
import time
import timeit
# active scene cube
scene = bge.logic.getCurrentScene()
# the object "Cube"
cube = scene.objects["Cube"]
keyboard = bge.logic.keyboard
LOOP = True
FPS = 60 # Frames per Second
last_time = timeit.default_timer()
bge.logic.setExitKey(bge.events.LEFTARROWKEY)
while LOOP:
# mainloop
# wait until next frame
current_time = timeit.default_timer()
# sleep time until next frame
sleep_time = 1 / FPS - (current_time - last_time)
if sleep_time > 0:
time.sleep(sleep_time)
last_time = current_time
# change scene
# read keyboard input
k_events = bge.logic.KX_INPUT_ACTIVE
# uparrow key pressed
if keyboard.events[bge.events.UPARROWKEY] == k_events:
# move up cube .005 Blender-Units
cube.position[2] += .01
# downarrow key pressed
if keyboard.events[bge.events.DOWNARROWKEY] == k_events:
# move down cube .005 Blender-Units
cube.position[2] -= .01
# escape key pressed
if keyboard.events[bge.events.ESCKEY] == k_events:
# Stop mainloop -> exit program
LOOP = False
# render next frame
bge.logic.NextFrame()
It works correctly and I can move the cube up and down with the keyboard arrows, but when i press Esc blender freezes for about ten seconds and then it crashes with this error:
Debug: Exit Python script 'main.py'
Blender Game Engine Finished
Writing: /tmp/test.crash.txt
Segmentation fault (core dumped)
This is the content of /tmp/test.crash.txt:
# Blender 2.92.0, Commit date: 2020-11-25 10:08, Hash acfa07879f0e
# backtrace
./blender(BLI_system_backtrace+0x20) [0x8923020]
./blender() [0xfa494a]
/usr/lib/libc.so.6(+0x3d6a0) [0x7ff7754776a0]
./blender() [0x746d930]
./blender(GPU_viewport_free+0x10) [0x746e5e0]
./blender(_ZN8KX_SceneD1Ev+0xac) [0x1da240c]
./blender(_ZN8KX_SceneD0Ev+0x9) [0x1da29f9]
./blender(_ZN19BL_BlenderConverter11RemoveSceneEP8KX_Scene+0x10b) [0x1d3618b]
./blender(_ZN15KX_KetsjiEngine10StopEngineEv+0x34) [0x1d7a864]
./blender(_ZN11LA_Launcher10ExitEngineEv+0x19) [0x1d33879]
./blender(_ZN18LA_BlenderLauncher10ExitEngineEv+0x9) [0x1d33759]
./blender(StartKetsjiShell+0x3b4) [0x1d32c84]
./blender() [0x1ca8d4d]
./blender() [0x132b508]
./blender() [0x132e464]
./blender() [0x132f70a]
./blender() [0x132fa1c]
./blender(wm_event_do_handlers+0x60a) [0x13303fa]
./blender(WM_main+0x20) [0x1326f20]
./blender(main+0x3e5) [0xebd105]
/usr/lib/libc.so.6(__libc_start_main+0xf2) [0x7ff775462152]
./blender() [0xfa11d3]
# Python backtrace
So, my question is: how to stop the “game” and return to blender to work?
It’s very annoying to restart blender every time I want to test the “game”.