世嘉MD游戏开发【九】:Sprite精灵

news/2024/11/28 3:46:50/

终于讲到Sprite精灵了,我自己也很希望快点讲精灵,但是欲速则不达,自己要是还没研究透彻这个知识点就去讲下一个,感觉文章肯定是写不好的。

我用下图来做演示,SFC幽游白书-魔界最强列传里的雷禅:

怎么处理图片已经演示的很清楚了,前面也有讲过,不明白的可以到SGDK/bin里查看rescomp.txt这个文档。

怎么把图片设置成精灵呢,先把需要的精灵放到工程根目录下的res文件夹里,然后在res文件夹里新建一个resources.res文件,用记事本打开,在里面写上:

SPRITE hq "hq.png" 8 8 0

SPRITE是代表这个资源的类型,hq是这个资源的名字(写成黄泉的缩写了,应该叫lc.png,不要在意这些细节),在代码里用到的话就写hq,双引号内的是文件路径,8 8是这个图片横着数有几个tile,竖着数有几个tile,这个雷禅分辨率是64x64,除以8,所以就是8 8了,最后的0代表压缩级别,0是不压缩,也是质量最好的。

接着在工程根目录下的src文件夹里新建main.c,开始撸代码:

#include <genesis.h>
#include <vdp.h>
#include <sprite_eng.h>
#include "resources.h"    //resources.res文件自动生成的头文件//声明一个精灵变量
Sprite *sprite_hq = NULL;//位置
s16 px = 0;
s16 py = 0;//输入管理
void HandleInput();//打印位置信息
void PrintMessage();int main()
{//初始化sprite,默认VRAM内有512个tile缓存区,内存中有320个tile缓存区,//要是需要自己设置tile缓存区可以用void SPR_initEx(u16 vramSize, u16 unpackBufferSize);//注:这一句初始化一定要写,不然显示会乱码SPR_init();//设置PAL1调色板为hq.palette->data,hq是SpriteDefinition类型的结构体:详情可定位到头文件查阅// typedef struct// {//     Palette* palette;//     u16 numAnimation;//     Animation** animations;//     u16 maxNumTile;//     u16 maxNumSprite;// } SpriteDefinition;VDP_setPalette(PAL1, hq.palette->data);//背景太黑了,改成灰色VDP_setBackgroundColor(3);//给精灵变量赋值,后面这几个参数不再详细赘述,前面讲绘制图片时有讲到过类似的sprite_hq = SPR_addSprite(&hq, px, py, TILE_ATTR(PAL1, 0, FALSE, FALSE));while (1){//输入管理HandleInput();//更新精灵,一定要写这一句,不要忘记,否则对精灵的操作都是无效的,并且也不会显示精灵SPR_update();//在屏幕打印出精灵的坐标信息PrintMessage();VDP_waitVSync();}return 0;
}//前面有讲过input,很简单,大家看看就行
void HandleInput()
{u16 input = JOY_readJoypad(JOY_1);if (input & BUTTON_UP){py--;}if (input & BUTTON_DOWN){py++;}if (input & BUTTON_LEFT){px--;}if (input & BUTTON_RIGHT){px++;}//void SPR_setPosition(Sprite* sprite, s16 x, s16 y);//s16是shortSPR_setPosition(sprite_hq, px, py);
}//打印位置信息
void PrintMessage()
{//存储x坐标char msg_x[25];//存储y坐标char msg_y[25];//把坐标格式化成字符串分别存到俩msg数组中,这里只写%hd不行,必须在%后面加上一个数字//否则得到的坐标会变得很诡异,可以自行试一下sprintf(msg_x, "sprite pos x : %6hd", px);sprintf(msg_y, "sprite pos y : %6hd", py);//略过VDP_drawText(msg_x, 1, 22);VDP_drawText(msg_y, 1, 23);
}

注:精灵的默认顶点是图片左上角。

编译,得到rom.bin,用模拟器打开,就可以用方向键控制精灵移动了^_^

未完待续。。。

复古游戏开发群:879063892


http://www.ppmy.cn/news/535657.html

相关文章

世嘉MD游戏开发【五】:显示Tile图块

显示Tile图块&#xff0c;首先要有tile图块&#xff0c;这就要用到一个小工具了&#xff0c;叫Sega Genesis Tile Designer&#xff0c;软件界面如下&#xff1a; 看起来很复杂&#xff0c;其实自己亲自操作一下几分钟就能搞懂了&#xff0c;都是些很基础的功能&#xff0c;软件…

世嘉MD游戏开发【十二】:伪3D地面,Pseudo-3D

终于讲到伪3D效果了&#xff0c;这一块比较棘手&#xff0c;我从github上下载的老外写的例子一点点研究&#xff0c;研究了两三天才研究出原理&#xff0c;其实原理很TM简单&#xff0c;主要是那个老外写的代码太烂了&#xff0c;写了很多没用的东西&#xff0c;而且算法上还啰…

世嘉MD游戏开发【二】:Hello World

上一节课已经讲了SGDK环境的配置&#xff0c;这一节课来开发我们的第一个世嘉MD程序&#xff1a;Hello World 编辑器我用的vscode&#xff0c;本文就以vscode为主。 一、新建一个工程&#xff0c;其实不用说的这么正式&#xff0c;意思就是在你喜欢的任意位置新建一个文件夹&…

世嘉MD游戏开发【七】:绘制图片,drawImage

这一期讲绘制图片。 上一期讲的是绘制tile&#xff0c;还要用那个不怎么好用的工具导出数组数据&#xff0c;很繁琐&#xff0c;这次就不用那个蹩脚的工具了&#xff0c;随便一个图片用photoshop处理一下就可以了&#xff0c;对于图片的要求有这么几点&#xff1a; 1.图片分辨…

神龟对打java_谁知道世嘉游戏忍者神龟对打的出招表!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 忍者神龟之格斗大会 Teenage Mutant Hero Turtles Tournament Fighters (E) KONAMI/93.12.10/机种MD/类型FTG 基本操作-出招-- A 轻斩 B 轻踢 C 挑衅 投技&#xff1a; 近身 → A或B 当血槽减少呈闪灭状态时可使用超必杀 ~~~~~~~…

【数据库七】MySQL主从复制与读写分离

MySQL主从复制与读写分离 1.案例概述2.什么是读写分离&#xff1f;3.为什么要读写分离呢&#xff1f;4.什么时候要读写分离&#xff1f;5.主从复制与读写分离6.MySQL主从复制原理6.1 mysql的复制类型 7.主从复制的工作过程7.1 MySQL架构图7.2 口语化工作工程 8.MySQL 读写分离原…

构建安全架构的 Azure 云:深入了解零信任体系结构

文章目录 前言一、零信任安全模型的概念以及背景介绍二、传统安全模型&#xff08;边界模型&#xff09;三、零信任模型&#xff08;现阶段主流云厂商策略&#xff09;四、Azure 中的零信任体系结构&#xff08;本文重点&#xff09;4.1 基础知识点&#xff08;必须了解&#x…

修改及刷写蓝魔V3 value MP3固件心得

刷写蓝魔V3 value MP3固件心得 出于无聊网购了一台蓝魔V3 value 来听&#xff0c;拿来之后发现有诸多的不足之处&#xff0c;于是想修改下固件&#xff0c;从官方网上下载来了固件和刷机工具。结果发现原来的ResEdit V2.0已经无法胜任此修改了&#xff0c;知道是蓝魔固件进行过…