添加天空、手和声音 | Python开发 我的世界Minecraft
2023-02-10 18:56 作者:xiaotiaotiao2011 | 我要投稿
from ursina import * #导入ursina
from ursina.prefabs.first_person_controller import FirstPersonController
import random
app=Ursina() #创建一个窗口
grass_texture=load_texture('assets/grass_block.png')
stone_texture=load_texture('assets/stone_block.png')
brick_texture=load_texture('assets/brick_block.png')
dirt_texture=load_texture('assets/dirt_block.png')
sky_texture=load_texture('assets/skybox.png')
arm_texture=load_texture('assets/arm_texture.png')
punch_sound=Audio('assets/punch_sound.wav',loop=False,autoplay=False)
block_pick=1
window.fps_counter.enabled=False
window.exit_button.visible=False
def update():
global block_pick
if held_keys['1']: block_pick=1
if held_keys['2']: block_pick = 2
if held_keys['3']: block_pick = 3
if held_keys['4']: block_pick = 4
if held_keys['left mouse'] or held_keys['right mouse']:
hand.active()
else:
hand.passive()
class Block(Button):
def __init__(self,position=(0,0,0),texture=grass_texture):
super().__init__(
parent=scene,
position=position,
model='assets/block',
origin_y=0.5,
texture=texture,
color=color.color(0,0,random.uniform(0.9,1)),
#highlight_color=color.red,
scale=0.5
)
def input(self,key):
if self.hovered:
if key=='left mouse down':
punch_sound.play()
if block_pick==1:
block=Block(position=self.position+mouse.normal,texture=grass_texture)
if block_pick==2:
block=Block(position=self.position+mouse.normal,texture=stone_texture)
if block_pick==3:
block=Block(position=self.position+mouse.normal,texture=brick_texture)
if block_pick==4:
block=Block(position=self.position+mouse.normal,texture=dirt_texture)
if key == 'right mouse down':
punch_sound.play()
destroy(self)
class Sky(Entity):
def __init__(self):
super().__init__(
parent=scene,
model='sphere',
texture=sky_texture,
scale=random.randrange(200,300),
double_sided=True
)
class Hand(Entity):
def __init__(self):
super().__init__(
parent=camera.ui,
model='assets/arm',
texture=arm_texture,
scale=0.2,
rotation=Vec3(150,-10,0),
position=Vec2(0.7,-0.58)
)
def active(self):
self.position = Vec2(0.5, -0.53)
def passive(self):
self.position = Vec2(0.7, -0.58)
#会生成几层
for z in range(10):
for x in range(10):
for y in range(3):
block=Block(position=(x,y,z),texture=stone_texture)
for z in range(10):
for x in range(10):
for y in range(3):
block=Block(position=(x,y+3,z),texture=dirt_texture)
for z in range(10):
for x in range(10):
block=Block(position=(x,y+4,z))
player=FirstPersonController(x=0,y=100,z=0)
sky=Sky()
hand=Hand()
app.run()

