编写设置
一个游戏里的设置是必不可少的,所以我们要先来编写 母体 的一些设置。
首先导入math
库。
import math
然后编写游戏中的数据(大家可以根据自己的喜好更改哦)
class Settings:
ticks_per_sec = 60 # 每秒刷新的次数
sector_size = 16 # 区块的大小
walking_speed = 5.0 # 走路的速度
gravity = 20.0 # 重力的大小
max_jump_height = 1.0 # 跳跃的高度
jump_speed = math.sqrt(2 * gravity * max_jump_height) # 根据跳跃的高度计算出跳跃的速度
terminal_velocity = 50 # 下降时最快的下落速度
player_height = 2 # 玩家的高度
faces = [
( 0, 1, 0),
( 0,-1, 0),
(-1, 0, 0),
( 1, 0, 0),
( 0, 0, 1),
( 0, 0,-1),
] # 与一个方块相邻的方块的相对坐标
大家如果有什么看不懂的地方可以看一下注释,等到以后用到时我也会详细说。
模型类
一个模型类是用来管理世界中的各个方块的类。它将负责添加、删除、显示、隐藏方块,是一个非常重要的类。
class Model:
pass
class Window(pyglet.window.Window):
def __init__(self, *args, **kwargs):
pyglet.window.Window.__init__(self, *args, **kwargs)
self.model = Model()
这样就可以了。接下来我们来做一写准备工作。
准备工作
首先编写一些函数。
def tex_coord(x, y): # 一个方块的贴图的坐标
m = 1.0 / 4
n = 1.0 / 4
dx = x * m
dy = y * n
return (dx, dy, dx + m, dy, dx + m, dy + m, dx, dy + m)
# 贴图坐标是固定的
tex_coords = [
*tex_coord(0, 0),
*tex_coord(0, 1),
*tex_coord(1, 1),
*tex_coord(1, 0),
*tex_coord(2, 1),
*tex_coord(2, 0),
]
# 用于计算一个方块的各个坐标
def cube_vertices(x, y, z, n):
return [
x-n,y+n,z-n, x-n,y+n,z+n, x+n,y+n,z+n, x+n,y+n,z-n, # top
x-n,y-n,z-n, x+n,y-n,z-n, x+n,y-n,z+n, x-n,y-n,z+n, # bottom
x-n,y-n,z-n, x-n,y-n,z+n, x-n,y+n,z+n, x-n,y+n,z-n, # left
x+n,y-n,z+n, x+n,y-n,z-n, x+n,y+n,z-n, x+n,y+n,z+n, # right
x-n,y-n,z+n, x+n,y-n,z+n, x+n,y+n,z+n, x-n,y+n,z+n, # front
x+n,y-n,z-n, x-n,y-n,z-n, x-n,y+n,z-n, x+n,y+n,z-n, # back
]
# 把一个坐标格式化到整数
def normalize(position):
x, y, z = position
return int(round(x)), int(round(y)), int(round(z))
# 把一个坐标格式化到区块
def sectorize(position):
x, y, z = normalize(position)
x, z = x // Settings.sector_size, z // Settings.sector_size
return (x, 0, z)
好啦,我们这篇文章就先到这里了,代码中有一些计算的部分,大家可以琢磨一下。