跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

C++ 相对运动动画实战:葫芦娃飞向太空

基于 C++ 精灵库实现相对运动动画效果。通过动态数组管理背景星星,利用坐标变换模拟角色向太空飞行的视觉错觉。核心在于星星向左下角移动与角色静止或反向移动的相对关系。代码展示了动态内存分配、循环控制及全局屏幕对象的使用,适合初学者理解动画原理与基础图形编程。

GRACE Grace发布于 2026/3/15更新于 2026/10/2588 浏览

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( i=; 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->();
        (); 
    }
     ;
}
int
0
1000
new
Sprite
"res/star.png"
// 假设存在星形资源
setPos
random
random
// 随机位置
push_back
// 主循环:逐帧更新
while
true
// 清空屏幕
clear
// 绘制所有星星并移动
for
auto
draw
// 星星向左下角移动,模拟相对运动
int
getX
2
int
getY
2
if
0
// 移出屏幕重置位置
setPos
random
random
else
setPos
// 绘制主角
draw
// 刷新显示
update
sleep
16
// 控制帧率约 60fps
return
0

关键点解析

  • 动态数组:vector<Sprite*> 允许我们在运行时灵活创建和管理成千上万个星星对象,无需预先分配固定大小的内存。
  • 相对运动:注意星星的坐标变化逻辑。它们向左下移动,而主角保持相对静止或微调,视觉上就形成了主角向右上的速度感。
  • 资源管理:每个 new Sprite 都需要在程序退出前释放,避免内存泄漏。在实际项目中建议使用智能指针。
  • 性能优化:对于简单的动画,逐帧重绘整个场景可能开销较大。如果背景复杂,可以考虑双缓冲机制。

这个例子展示了如何用极简的代码构建出具有动感的画面。你可以在此基础上扩展更多特效,比如添加音效、碰撞检测或者改变背景颜色。

目录

  1. C++ 相对运动动画实战:葫芦娃飞向太空
  2. 核心思路
  3. 代码实现
  4. 关键点解析

更多推荐文章

查看全部
  • DeepSeek 使用指南与高阶提示词技巧
  • 2024 年中国 AI 大模型场景应用趋势蓝皮书
  • Android 架构演进:MVC、MVP 与 MVVM 深度解析
  • Ollama 本地 AI 大模型部署完整教程
  • C++ 基础进阶:内存开辟规则与类型转换原理
  • WebMCP:浏览器 AI 交互新范式
  • 构建 Java 镜像的 10 个最佳实践
  • Python try-except-else 异常处理详解
  • Soft Actor-Critic (SAC) 算法详解与 PyTorch 实现
  • 2026 年毕业论文 AI 检测标准及各高校红线汇总
  • Java 滑动窗口算法实战:LeetCode 经典题解
  • Ubuntu 部署 OpenClaw 并接入飞书机器人
  • 为什么开源语言大模型很重要?
  • AI 写作发展趋势与展望
  • C语言Web开发:CGI、FastCGI与Nginx模块实战
  • JavaScript 内存管理机制与变量作用域优化
  • Reachy Mini:桌面机器人开源硬件设计与实现
  • Ubuntu 403 软件包下载错误解决方法
  • 如何成为一名职业黑客:核心技能与成长路径
  • FPGA 是什么:现场可编程门阵列详解

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online