python
from ursina import *
class platfoarm(Entity):
def __init__(self,model=None):
pass
def click():
global nav
nav = [(mouse.hovered_entity.x, mouse.hovered_entity.y + mouse.hovered_entity.scale[1] / 2, mouse.hovered_entity.z), 1, 0]
def runner():
nav = [None, 0, 0]
# Configurable variables
movement_speed = 0.1 # Speed of movement when holding WASD
rotation_speed = 40 # Speed of rotation (degrees per frame)
camera_distance = 15 # Distance of the camera from the player
target_threshold = 0.5 # Distance threshold to stop moving when reaching the target
control_mode = 0 # 0 = Move with click, 1 = Move with WASD
def normalize_direction_vector(x_a, y_a, x_b, y_b):
global nav
dx = x_b - x_a
dy = y_b - y_a
magnitude = math.sqrt(dx**2 + dy**2)
try:
i = dx / magnitude
if magnitude < target_threshold:
nav[2] = 1
except:
i = 0
nav[2] = 1
try:
j = dy / magnitude
if magnitude < target_threshold:
nav[2] = 1
except:
j = 0
nav[2] = 1
return [i, j]
u = Ursina(fullscreen=1, development_mode=1)
a = Entity(model="cube", position=Vec3(0, 0, 0), scale=Vec3(1, 1, 1))
platfoarm()
for i in range(10):
for j in range(10):
block = Entity(model='cube', color=color.green, position=Vec3(i, -1, j), scale=Vec3(1, 1, 1), collider="box", on_click=click)
cam = camera
while True:
if held_keys["escape"]:
break
try:
hov.color = color.green
except:
pass
if control_mode: # WASD Movement
if held_keys["w"]:
a.x += movement_speed
a.z += movement_speed
if held_keys["s"]:
a.x -= movement_speed
a.z -= movement_speed
if held_keys["a"]:
a.x -= movement_speed
a.z += movement_speed
if held_keys["d"]:
a.x += movement_speed
a.z -= movement_speed
if not control_mode and nav[1]: # Click-to-move
c = normalize_direction_vector(a.x, a.z, nav[0][0], nav[0][2])
if nav[2]:
nav = [None, 0, 0]
else:
a.x += c[0] * movement_speed
a.z += c[1] * movement_speed
a.look_at((mouse.x * 5 + a.x, 0, mouse.y * 5 + a.z,))
cam.x = a.x - camera_distance
cam.y = a.y + camera_distance
cam.z = a.z - camera_distance
cam.look_at((mouse.x * 5 + a.x, 0, mouse.y * 5 + a.z,))
try:
hov = mouse.hovered_entity
mouse.hovered_entity.color = color.black
except:
pass
a.rotate(Vec3(0, rotation_speed, 0))
u.step()
runner()
это больше не работает. Я не хочу менять свой код (например, используя app.run и обновление def, которое я хочу сохранить в цикле while) class platfoarm() (с орфографической ошибкой) все еще не является частью кода
Я спросил в чате, но не получил полезных ответов
Я попробовал заставить зеленые кубики запускать код при нажатии, и это сработало: [code]python from ursina import *
nav = [None, 0, 0]
# Configurable variables movement_speed = 0.1 # Speed of movement when holding WASD rotation_speed = 40 # Speed of rotation (degrees per frame) camera_distance = 15 # Distance of the camera from the player target_threshold = 0.5 # Distance threshold to stop moving when reaching the target control_mode = 0 # 0 = Move with click, 1 = Move with WASD
def click(): global nav nav = [(mouse.hovered_entity.x, mouse.hovered_entity.y + mouse.hovered_entity.scale[1] / 2, mouse.hovered_entity.z), 1, 0]
def normalize_direction_vector(x_a, y_a, x_b, y_b): global nav dx = x_b - x_a dy = y_b - y_a magnitude = math.sqrt(dx**2 + dy**2) try: i = dx / magnitude if magnitude < target_threshold: nav[2] = 1 except: i = 0 nav[2] = 1 try: j = dy / magnitude if magnitude < target_threshold: nav[2] = 1 except: j = 0 nav[2] = 1 return [i, j]
u = Ursina(fullscreen=1, development_mode=1)
a = Entity(model="cube", position=Vec3(0, 0, 0), scale=Vec3(1, 1, 1))
for i in range(10): for j in range(10): block = Entity(model='cube', color=color.green, position=Vec3(i, -1, j), scale=Vec3(1, 1, 1), collider="box", on_click=click)
cam = camera
while True: if held_keys["escape"]: break
try: hov.color = color.green except: pass
if control_mode: # WASD Movement if held_keys["w"]: a.x += movement_speed a.z += movement_speed if held_keys["s"]: a.x -= movement_speed a.z -= movement_speed if held_keys["a"]: a.x -= movement_speed a.z += movement_speed if held_keys["d"]: a.x += movement_speed a.z -= movement_speed
if not control_mode and nav[1]: # Click-to-move c = normalize_direction_vector(a.x, a.z, nav[0][0], nav[0][2]) if nav[2]: nav = [None, 0, 0] else: a.x += c[0] * movement_speed a.z += c[1] * movement_speed
[/code] но когда я изменил свой код вот так: [code]python from ursina import * class platfoarm(Entity): def __init__(self,model=None): pass
def click(): global nav nav = [(mouse.hovered_entity.x, mouse.hovered_entity.y + mouse.hovered_entity.scale[1] / 2, mouse.hovered_entity.z), 1, 0]
def runner():
nav = [None, 0, 0]
# Configurable variables movement_speed = 0.1 # Speed of movement when holding WASD rotation_speed = 40 # Speed of rotation (degrees per frame) camera_distance = 15 # Distance of the camera from the player target_threshold = 0.5 # Distance threshold to stop moving when reaching the target control_mode = 0 # 0 = Move with click, 1 = Move with WASD
def normalize_direction_vector(x_a, y_a, x_b, y_b): global nav dx = x_b - x_a dy = y_b - y_a magnitude = math.sqrt(dx**2 + dy**2) try: i = dx / magnitude if magnitude < target_threshold: nav[2] = 1 except: i = 0 nav[2] = 1 try: j = dy / magnitude if magnitude < target_threshold: nav[2] = 1 except: j = 0 nav[2] = 1 return [i, j]
u = Ursina(fullscreen=1, development_mode=1)
a = Entity(model="cube", position=Vec3(0, 0, 0), scale=Vec3(1, 1, 1)) platfoarm() for i in range(10): for j in range(10): block = Entity(model='cube', color=color.green, position=Vec3(i, -1, j), scale=Vec3(1, 1, 1), collider="box", on_click=click)
cam = camera
while True: if held_keys["escape"]: break
try: hov.color = color.green except: pass
if control_mode: # WASD Movement if held_keys["w"]: a.x += movement_speed a.z += movement_speed if held_keys["s"]: a.x -= movement_speed a.z -= movement_speed if held_keys["a"]: a.x -= movement_speed a.z += movement_speed if held_keys["d"]: a.x += movement_speed a.z -= movement_speed
if not control_mode and nav[1]: # Click-to-move c = normalize_direction_vector(a.x, a.z, nav[0][0], nav[0][2]) if nav[2]: nav = [None, 0, 0] else: a.x += c[0] * movement_speed a.z += c[1] * movement_speed
a.rotate(Vec3(0, rotation_speed, 0)) u.step() runner() [/code] это больше не работает. Я не хочу менять свой код (например, используя app.run и обновление def, которое я хочу сохранить в цикле while) class platfoarm() (с орфографической ошибкой) все еще не является частью кода Я спросил в чате, но не получил полезных ответов