Hasty Briefsbeta

双语

Finishing the ZX Spectrum Shooting Gallery

2 days ago
  • 将射击场移植到ZX Spectrum,重点处理射击机制,包括数据结构、移动、删除、生成、显示列表、渲染和碰撞检测。
  • 使用结构体数组设计数据:max_shot_y、shot_y(16)、shot_x(16)、shot_collide(16)、num_shots、shot_tails和shot_heads数组。
  • 自主移动每帧将shot Y坐标减2;Y=0的子弹被移除。
  • 移除子弹时使用IX寄存器的压缩扫描复制未删除项,更新max_shot_y并缩小数组大小。
  • 生成新子弹时检查约束条件(shot_requested、max_shot_y<124、num_shots<16),然后设置Y=146、根据blaster_x和朝向调整X值。
  • record_display_list从子弹数组生成shot_tails(擦除位置)和shot_heads(绘制地址、掩码、索引),处理碰撞和屏幕外子弹。
  • 渲染:erase_shot_tails清除存储地址处的字节;draw_shots使用OR组合像素并通过AND检测屏幕内存的碰撞,更新shot_collide。
  • 主游戏循环顺序:暂停、擦除目标和子弹尾部、绘制目标、更新爆破枪、绘制子弹、处理输入、自主移动、压缩子弹、生成新子弹、记录显示列表。
  • 使用边框颜色的效率测量显示稳定50帧/秒;仅在击中目标时因分数标题重绘出现峰值。
  • 项目总结为最复杂的移植工作;学到关于Z80指令选择和使用IX处理结构体数组的经验,但总体成功且速度足够。