C++ 相对运动动画实战:葫芦娃飞向太空
相对运动是计算机图形学中常见的视觉欺骗技巧。通过让背景元素向相反方向移动,可以让静止或缓慢移动的主体产生高速飞行的错觉。下面是一个基于 C++ 精灵库的示例,演示了如何用几十行代码实现'葫芦娃飞向太空'的效果。
核心思路
程序的核心在于星星的位移逻辑。当星星向左下角快速移动时,观察者会感觉角色正在向右上角飞行。这种相对运动的体验比单纯移动角色更节省资源,且视觉效果更佳。
代码中使用了动态数组(类似 Python 列表)来管理大量星星对象,并通过全局屏幕指针直接操作窗口坐标。虽然变量名使用了中文以方便初学者理解,但在实际工程中建议遵循命名规范。
代码实现
/*
* 本程序描述了一个两个葫芦娃 (合用一个造型),以铁臂阿童木或超人的姿势向深空飞翔的动画。
* 通过星星的向左下角快速移动,采用相对运动的原理,就好像葫芦朝右上角移动。
* 演示了 C++ 精灵库的一些用法:
* 1. 给角色换上新的造型
* 2. 动态数组管理对象
* 3. for 循环生成大量背景元素
* 4. 相对运动的视觉体验
* 5. 自定义角色的属性
* 6. 使用内置全局指针变量 g_screen
*/
#include "sprites.h" // 包含 C++ 精灵库
#include <vector> // 包含向量容器
using namespace std;
Sprite 葫芦娃{"res/2huluwa.png"}; // 建立角色叫葫芦娃
// g_screen 是全局屏幕对象的指针,所以可以直接使用
int width = g_screen->width(); // 窗口屏幕宽高
int height = g_screen->height(); // 窗口屏幕高度
int main() {
// 初始化界面状态
葫芦娃.hide().scale(0.01).bgcolor("black").color("cyan").write("加载中...");
vector<Sprite*> stars; // 新建动态数组,保存星星指针
// 产生一千颗星星
for(int i=0; i<; i++) {
Sprite *star = ();
star->((width), (height));
stars.(star);
}
() {
g_screen->();
( star : stars) {
star->();
x = star->() - ;
y = star->() + ;
(x < || y > height) {
star->((width), (height));
} {
star->(x, y);
}
}
葫芦娃.();
g_screen->();
();
}
;
}

