【发布时间】:2011-05-14 06:30:04
【问题描述】:
我正在制作一个简单的游戏,但我需要它每秒绘制 20 次图像。我打算使用多个 UIImageViews,但我很快意识到它不起作用。那么,如何绘制图像,然后在更新计时器触发时“擦除”它们?我尝试使用以下代码,但没有任何显示。
- (void) update:(NSTimer*) timer {
UIimage *someImage;
someImage = [UIImage imageNamed:@"car.png"];
[someImage drawAtPoint:thePoint];
}
我尝试将 thePoint 设置为 NSPoint 和 CGRect,但没有任何结果。现在我该怎么做?注意:thePoint 在我的 .h 文件中声明。它目前是一个 NSPoint,我认为它正在被正确使用。
【问题讨论】:
-
我不太熟悉在这种情况下使用图像视图,但是您不能将图像设置到一个 imageView 实例中吗?当更新发生时,您可以调用
imageView.image = nil;,然后使用imageView.image = newImage;设置新图像。如果图片尺寸不大(强制imageView缩放),理论上应该可以及时设置图片 -
如果它是你想要做的动画(以给定的帧速率播放几帧),这不是你应该做的。改用
yourView.animationImages = animationFramesArray; yourView.animationDuration = 10; [yourView startAnimating]; -
@mindnoise 这不是动画,但谢谢你告诉我怎么做。当我开始在我计划制作的另一个应用程序中添加动画时,这将非常有用。
-
这种带有图像视图的实现在性能方面可能不合适。我会选择退出 CALayer 子类,并在 drawInContext 方法中将图像直接绘制到上下文中。这样做的一个原因是加载图像数据并将图像直接绘制到上下文中可以使您免于隐藏在 UIImage 和 UIImageView 后面的讨厌的功能。
标签: iphone objective-c cocoa-touch uiimage