0453-Bomb-角色速度控制
环境
- Time 2024-03-17
- Zig 0.12.0-dev.3152+90c1a2c41
- WSL-Ubuntu 22.04.3 LTS
- raylib 5.0
前言
说明
参考资料:
- 《游戏开发:世嘉新人培训教材》
- 图片素材:https://www.ituring.com.cn/book/1742
目标
实现了基于时间的移动速度控制,可以调整速度的值来实现角色的移动速度。
map
speedUnit
增加了一个速度单元,将一个像素分成了 1000。
const speedUnit = 1000;
player1
玩家 1 的初始坐标也需要同步放大。
roles[0] = .{
.x = 1 * tileMap.unit * speedUnit,
.y = 1 * tileMap.unit * speedUnit,
.type = .player1,
};
enemy
初始的敌人的位置也需要同步放大。
self.roles[1 + i] = .{
.x = (floors[i] >> 16 & 0xFFFF) * tileMap.unit * speedUnit,
.y = (floors[i] & 0xFFFF) * tileMap.unit * speedUnit,
};
draw
绘图的时候,将对应的坐标缩小 speedUnit。
for (self.roles) |value| {
const x = value.x / speedUnit;
tileMap.drawXY(x, value.y / speedUnit, @intFromEnum(value.type));
}
play
roleSpeed
定义了玩家和敌人的移动速度
const roleSpeed = 100;
时间和速度
从引擎获取了帧时间然后乘以速度。
pub fn update(self: *Gameplay) ?@import("popup.zig").PopupType {
if (engine.isPressed(engine.Key.x)) return .over;
if (engine.isPressed(engine.Key.c)) return .clear;
const speed = engine.frameTime() * roleSpeed;
var p1 = self.map.player1();
if (engine.isDown(engine.Key.a)) p1.x -|= speed;
if (engine.isDown(engine.Key.d)) p1.x +|= speed;
if (engine.isDown(engine.Key.w)) p1.y -|= speed;
if (engine.isDown(engine.Key.s)) p1.y +|= speed;
return null;
}
效果

总结
实现了基于时间的移动速度控制,可以调整速度的值来实现角色的移动速度。

浙公网安备 33010602011771号