【问题标题】:I am getting error while I'm creating game with Ursina(python). How can I fix it?我在使用 Ursina(python) 创建游戏时遇到错误。我该如何解决?
【发布时间】:2022-12-09 08:34:12
【问题描述】:

我正在使用 Ursina Engine (python) 创建 FPS 游戏。但是每当我尝试播放它时,我就开始出错。

我刚开始编码,所以我不知道我应该做什么。

代码:

from ursina import *
from ursina.prefabs.first_person_controller import *

class Player(Entity):
  def __init__(self, **kwargs):
    self.controller = FirstPersonController(**kwargs)
    super().__init__(parent=self.controller)


    self.hand_gun = Entity(parent=self.controller.camera_pivot, scale=0.1, position=Vec3(0.7, -1, 1.5), rotation=Vec3(0, 170, 0), model='gun', Texture='M1911-RIGHT', visible=False)

    self.knife = Entity(parent=self.controller.camera_pivot, scale=0.4, position=Vec3(0.7, -1, 1.5), rotation=Vec3(0, 170, 0), model='knife', Texture='knife', visible=False)

    self.weapons = [self.hand_gun, self.knife]
    self.current_weapon = 0
    self.switch_weapons()


  def switch_weapon(self):
    for i, v in enumerate(self.weapons):
      if i == self.current_weapon:
        v.visible = True
      
      else:
        v.visible = False
  
  def input(self, key):
    try:
      self.current_weapon = int(key) - 1
      self.switch_weapon()
    except ValueError:
      pass

    if key == 'scroll up':
      self.current_weapon = (self.current_weapon + 1) % len(self.weapons)
      self.switch_weapon()

    if key == 'scroll down':
      self.current_weapon = (self.current_weapon - 1) % len(self.weapons)
      self.switch_weapon()

    if key == 'left_mouse_down' and self.current_weapon == 0:
      Bullet(model='sphere', color=color.black, scale=0.2, position=self.controller.camera_pivot.world_position, rotation=self.controller.camera_pivot.world_rotation)


  def update(self):
    self.controller.camera_pivot.y = 2 - held_keys['left control']


class Bullet(Entity):
  def __init__(self, speed=50, lifetime = 10, **kwargs):
    super().__init__(**kwargs)
    self.speed = speed
    self.lifetime = lifetime
    self.start = time.time()


  def update(self):
    ray = raycast(self.world_position, self.forward, distance=self.speed*time.dt)
    if not ray.hit and time.time() - self.start < self.lifetime:
      self.world_position += self.forward * self.speed * time.daylight

    else:
      destroy(self)


app = Ursina

ground = Entity(model='plane', scale=20, texture='white_cube', texture_scale='mesh')

player = Player(position=(0,10,0))

app.run()

只是为了学习Ursina Engine做的一款射击小游戏

我收到的错误信息是:

package_folder: C:\Users\Yunwoo Chang\AppData\Roaming\Python\Python310\site-packages\ursina
asset_folder: c:\Users\Yunwoo Chang\Desktop\Tetris\Ursina Engine
Exception ignored in: <function Texture.__del__ at 0x000001E55A5129E0>        
Traceback (most recent call last):     
  File "C:\Users\Yunwoo Chang\AppData\Roaming\Python\Python310\site-packages\ursina\texture.py", line 185, in __del__    del self._cached_image
AttributeError: _cached_image
Traceback (most recent call last):     
  File "c:\Users\Yunwoo Chang\Desktop\Tetris\Ursina Engine\03 - Weapons.py", line 71, in <module>
    player = Player(position=(0,10,0)) 
  File "c:\Users\Yunwoo Chang\Desktop\Tetris\Ursina Engine\03 - Weapons.py", line 6, in __init__
    self.controller = FirstPersonController(**kwargs)
  File "C:\Users\Yunwoo Chang\AppData\Roaming\Python\Python310\site-packages\ursina\prefabs\first_person_controller.py", line 32, in __init__
    ray = raycast(self.world_position+(0,self.height,0), self.down, ignore=(self,))
  File "C:\Users\Yunwoo Chang\AppData\Roaming\Python\Python310\site-packages\ursina\entity.py", line 433, in world_position
    return Vec3(self.get_position(render))
NameError: name 'render' is not defined

我该如何解决?

我认为这是某种属性错误,但我不知道该怎么办。

【问题讨论】:

    标签: python game-engine game-development attributeerror ursina


    【解决方案1】:

    在实例化实体之前,您应该使用 app = Ursina() 实例化 Ursina。你错过了()

    【讨论】:

    • 我改变了,但我仍然得到错误
    • 相同的错误还是不同的错误?您还在第 16 行将 self.switch_weapon() 拼错为 self.switch_weapons()
    • 我得到不同的错误。这一次,我得到错误“第 74 行,在 <module> player = Player(position=(0,10,0)) 文件“c:UsersYunwoo ChangDesktopTetrisUrsina Engine - Weapons.py”,第 18 行,在在里面self.switch_weapons() AttributeError: 'Player' 对象没有属性 'switch_weapons' “
    • 是的,我在上面的评论中提到,您在第 16 行也将 self.switch_weapon() 拼错为 self.switch_weapons()
    • 或 18. 您的错误消息字面意思是出了什么问题,我相信您可以修复它。
    猜你喜欢
    • 1970-01-01
    • 2022-07-11
    • 2019-02-02
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 2021-10-02
    • 2012-09-18
    • 1970-01-01
    相关资源
    最近更新 更多