gpt4 book ai didi

c++ - 制作 2D 动画的最佳方式是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:12:28 28 4
gpt4 key购买 nike

我正在编写一个 2D 动画类,我有 TGA存储播放器动画的图片。这些图片是 8x8 block (因此每行有 8 帧移动角色)

但是,我不知道如何在代码中设置动画。

我正在考虑通过移动每帧的 u-v 坐标并仅返回当前帧来更新它。我该怎么做?

最佳答案

支持老兄。

由于您正在使用包含所有动画状态的纹理的 UV 坐标,因此您需要将像素坐标转换为 UV 坐标。

如果您的 Sprite 是 32 像素宽而您的纹理是 256 像素宽(因此包含 8 帧),您需要将 Sprite 的宽度除以纹理的宽度,得到一个介于... 0和1!这是你的补偿。要从您的 strip 中获取框架,只需执行以下操作:

float step_size_x = (float)(width) / (float)(texture_width);
float step_size_y = (float)(height) / (float)(texture_height);

float begin_u = step_size_x * step_current_x;
float begin_v = step_size_y * step_current_y;
float end_u = begin_x + step_size_x; // basically, if you want sprite 0, you go from 0 to the x of sprite 1
float end_v = begin_y + step_size_y;

就是这样!现在如果你想复制纹理的一部分,那将是 OpenGL 中的以下内容:

glBindTexture(GL_TEXTURE_2D, texture_id);
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(begin_u, begin_v); glVertex3f(x - (width / 2), y - (height / 2), 0);
glTexCoord2f(end_u, begin_v); glVertex3f(x + (width / 2), y - (height / 2), 0);
glTexCoord2f(begin_u, end_u); glVertex3f(x - (width / 2), y + (height / 2), 0);
glTexCoord2f(end_u, end_u); glVertex3f(x + (width / 2), y + (height / 2), 0);
glEnd();

现在我已经给了你一个完整的代码示例,请你不要再为你的游戏打扰我好吗? :P

关于c++ - 制作 2D 动画的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2081710/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com