【问题标题】:How to make this "tape rolling" effect - Objective C如何制作这种“磁带滚动”效果 - Objective C
【发布时间】:2014-03-11 01:29:03
【问题描述】:

我正在创建一个游戏,我正在尝试制作一个侧面风景变化很大的效果,我没有使用 sprite kit 或任何东西,只使用 UIKit,因为它是一个简单的游戏。本质上,我有一个是 iPhone 5 屏幕尺寸 (568px x 2 = 1136px) 的两倍的 png,它在游戏开始时从屏幕中间开始,并在玩家浏览游戏时向下滚动。我希望它在它的中心经过某个点后重置并滚动游戏,所以我想写这个:

    if (scenery.center.y > 1136) {
    scenery.center = CGPointMake(scenery.center.x, -568);
}

我选择了scenery.center.y > 1136,因为它位于屏幕底部 x2。然后它在 -568 处做了一个点,所以没有风景的地方有 1 个全屏。有没有更好的方法来做到这一点,并使其连续?

【问题讨论】:

标签: ios objective-c


【解决方案1】:

我使用 CABasic Animations 来完成这个:

+(void)animateView:(UIView *)view {

    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position.x"];

    animation.delegate = self;
    animation.fromValue = view.frame.origin.x - view.frame.size.width;
    animation.toValue = [UIScreen mainScreen].bounds.size.width;
    animation.repeatCount = INFINITY;
    animation.duration = 0.5;
    animation.autoreverses = NO;
    animation.beginTime = 0; // ignore delay time for now
    animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];

    [view.layer addAnimation:animation forKey:@"horizontal_animation"];

}

视图代表我在屏幕上移动的 UIImageView。我从屏幕上启动它(参见 fromValue),然后将它移到屏幕外的另一侧(参见 toValue)。如果您还需要垂直动画,您可以创建另一个 [CABasicAnimation animationWithKeyPath:@"position.y"] 与上面显示的类似值。

另外,如果你想要线性动画以外的东西,只需替换 kCAMediaTimingFunctionLinear。取而代之的是开始输入 kCAMediaTiming ... 并让自动完成的奇迹带您完成剩下的工作。

【讨论】:

  • 这部分代码在哪里添加? @eckyzero,我在 .h 中声明了什么,我为此制定了一个方法
  • 你可以在任何地方添加它。我将我的动画与其他动画放在一个单独的 AnimationManager.m 文件中。然后我把 +(void)animateView:(UIView *)view;在 AnimationManager.h 文件中。然后,从我的 ViewController 我调用 [AnimationManager animateView:self.backgroundImageView];
  • 很高兴看到它有所帮助:D
【解决方案2】:

对于这样的事情,我总是使用两张图片。当一个人刚刚离开底部的屏幕时,将其向右移动到刚刚离开顶部的屏幕。在您的情况下,您可以将风景图像减半。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    • 2021-02-22
    相关资源
    最近更新 更多