当前位置: 首页 > 知识库问答 >
问题:

iPhone编程:UIImageView和动画的冲突检测

须峰
2023-03-14

我在ViewDid中有一个动画,如下所示

-(void)viewDidAppear:(BOOL)animated
{
    for (int i = 0; i < 100; i++) {

        p = arc4random_uniform(320)%4+1; //global integer

        CGRect startFrame = CGRectMake(p*50, -50, 50, 50);
        CGRect endFrame   = CGRectMake(p*50, CGRectGetHeight(self.view.bounds) + 50,
                                       50,
                                       50);

        animatedView = [[UIView alloc] initWithFrame:startFrame];
        animatedView.backgroundColor = [UIColor redColor];

        [self.view addSubview:animatedView];

        [UIView animateWithDuration:2.f
                              delay:i * 0.5f
                            options:UIViewAnimationCurveLinear
                         animations:^{
                             animatedView.frame = endFrame;
                         } completion:^(BOOL finished) {
                             [animatedView removeFromSuperview];
                         }];
    }
}

它只是从屏幕顶部创建小正方形,然后移动到底部。我还有一个UIImageView,它由x轴上的加速计控制。目标不是接触动画对象。就像一个简单的比赛游戏。然而,我无法找到如何检测imageView和动画之间的冲突?

共有2个答案

拓拔麒
2023-03-14

此测试中存在问题:如果(CGRectIntersectsRect(theView.frame,yourImageView.frame)必须检查视图的presentationLayer:

CGRect movingFrame = [[theImage.layer presentationLayer] frame];
    if (CGRectIntersectsRect(movingFrame, panier.frame)) {           
        // the image collided            
    }
王庆
2023-03-14

首先你需要在一个数组中保存所有的动画视图对象来检查与图像视图的冲突

NSMutableArray animatedViews;

然后在视图中进行初始化

animatedViews = [[NSMutableArray alloc] init];

然后“更改代码”视图将出现并添加一行

[self.view addSubview:animatedView];
[animatedViews addObject:animatedView];

然后创建一个冲突检查函数

-(void) checkCollision: (NSTimer *) theTimer{
    for(int i = 0; i < [animatedViews count]; i++) {
        UIView *theView = [animatedViews objectAtIndex:index];
        if (CGRectIntersectsRect(theView.frame, yourImageView.frame) {
           // the image collided
           // stop the timer and do your work here
        }
    }
}

然后在视图中添加这一行来调度定时器,每隔半秒钟调用函数以检查碰撞

[NSTimer scheduledTimerWithTimeInterval: 0.5  
                             target: self  
                           selector: @selector(checkCollision:)  
                           userInfo: nil  
                            repeats: YES];
 类似资料:
  • 下面的代码只是从屏幕顶部创建小正方形,然后移动到底部。我还有一个UIImageView(播放器),它由x轴上的加速计控制。目标不是接触动画对象。就像一个简单的比赛游戏。虽然我没有错误,但我无法检测到碰撞。我在代码中找不到错误。有什么问题吗?

  • 我在做一个小的迷你瓷砖引擎游戏。我目前正致力于实现简单的基于块的碰撞检测,然而我遇到了实际的问题。我已经在谷歌上搜索了几个小时,查看了不同的实现,但似乎无法理解它。我目前的努力(只在玩家向右移动时检测碰撞),大部分工作,但允许玩家通过障碍物的底部。碰撞使用法线映射数组来检测碰撞,映射中的任何值2都是一个实体对象。 我明白了我需要做什么的概念--在我移动我的玩家之前,计算玩家将最终进入哪个单元格。检

  • 嘿,我的游戏代码有问题。例如,有没有办法检查我的玩家sprite(英雄)右侧是否与obstacle_sprite组发生碰撞? 我只能弄清楚如何检查一般的碰撞,但如果玩家的右侧与障碍物相撞,我只想获得真正的输出。 在我的代码中,我使用一个隐形精灵作为hitbox,并将玩家吸引到这个隐形精灵中以检查碰撞,但使其看起来像障碍物拒绝玩家移动。

  • 我正在制作一个HTML5 Runner Game,对象连续运行,鼠标“点击”时,他会跳。然后我在游戏中添加一个障碍并检测碰撞,但它不能正常工作。问题是,当障碍物与跑步物体碰撞一次并检测到碰撞时,清除所有物体,然后在画布上重新绘制障碍物,但当障碍物一次又一次碰撞时,物体的速度变得越来越快……:(问题是如何克服它?代码如下:

  • 问题内容: 如何检测两个元素是否发生冲突? 这两个div是简单的彩色框,彼此垂直,因此没有复杂的形状或角度。 问题答案: 一般思路-获得框的偏移量和尺寸,并检查它们是否重叠。 如果要更新,可以使用: 另外,请注意,您可以针对特定示例优化功能。 因为它们是固定的,所以您不必重复读取框的尺寸(就像我在代码中一样)。您可以在页面加载时读取它们(将其读取到变量中),然后仅读取变量 小盒子的水平位置不会改变

  • 我正在尝试为我的大学工作制作一个基于2D平台的游戏(在SFML)。我不是要求任何人为我编写一些代码,但如果有人能提供一些指示,我将非常感激:) 目前我有大约13门课,包括: BaseEntity(大多数游戏对象都是由此派生的) 玩家(继承自BE) 魔法宝石(玩家需要这些来通过关卡晋级) 平台 SolidBlock(从平台继承) 可以说,我已经构建了大部分的游戏“积木”--每个类都有自己的更新函数,