gpt4 book ai didi

objective-c - 按帧显示动画?

转载 作者:太空狗 更新时间:2023-10-30 03:19:12 25 4
gpt4 key购买 nike

我有一个包含 100 张图像的动画。我希望能够通过一系列帧来显示动画。例如,我不想显示从 0:00 秒到 0:32 秒的动画,我宁愿使用第 0 帧到第 32 帧。我需要这样做是因为我需要对动画进行大量控制(即使相差一个frame 会产生错误的结果)。每一帧都是我亲自画的,所以我知道每一帧的形象。

无论如何,我可以使用 Objective-C 在 Cocoa 中做到这一点吗?我该怎么做?我只有 100 张图片,我不知道如何从这里开始。而且,与按时间指定相比,这会“滞后”吗?

我更喜欢详细的答案,因为我在网上找不到任何资源,而且我对此完全陌生。

请注意,我使用的是 OS X,而非 iOS,因此请不要提供与 iOS 相关的答案。我正在 Snow Leopard 上使用 Xcode 3.2.6。

最佳答案

获得最大控制权的方法是将所有图像存储在一个数组中。如果您将图像命名为“frame.png”(即“frame1.png”),那么您可以像这样快速加载所有图像:

frames = [[NSMutableArray alloc] init]; // In header: NSMutableArray *frames;
for (int i = 1; i < 100; i++) // 100 can be replaced for any number of frames.
{
NSString *filename = [NSString stringWithFormat:@"frame%i.png", i];
[frames addObject:[NSImage imageNamed:filename]];
}

它所做的是创建一个数组并用以您的文件命名的 NSImage 填充它。 %i 在字符串中被替换为 i 的当前值。

现在,您需要另一个变量来跟踪当前帧。类似于 unsigned int currentFrame;。这可以在每个更新循环中递增,或设置为特定值,让您完全控制显示的帧。

然后,在您的渲染循环中,您可以像这样渲染当前存储的任何帧:

[(NSImage *)[frames objectAtIndex:currentFrame - 1] drawAtPoint:animPos fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0f];

其中 animPos 是一个包含您希望绘制的位置的 NSPoint。 - 1 位于索引中,因此您可以引用从 1 而不是 0 开始的帧。此代码在帧 currentFrame 处拉取图像并将其呈现到屏幕.

由于您使用的是数组,因此还要确保检查 currentFrame 永远不会等于大于最大帧数的值,例如:if (currentFrame > 100) currentFrame = 1;。这会导致动画循环,因为当它到达最后一帧时,currentFrame 将设置回数组的起始索引。

关于绘图的更多信息,你应该看看:Cocoa Drawing GuideNSImage Class Reference .此外,如果您需要有关如何在每个时间增量更新帧的更多信息,请查看 NSTimer Class Reference。 .

关于objective-c - 按帧显示动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9366869/

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