这是我的问题: 我有两个图像:flakeImage和ViewToRotate。我想要的是,如果flakeImage触及ViewToRotate,ViewToRotate.alpha = 0.5;但是当屏幕上出现FlakeImage时ViewToRotate.alpha = 0.5;没有接触它。我认为这是我的观点的问题,因为我有:
UIImageView* flakeView = [[UIImageView alloc] initWithImage:flakeImage];
这是代码:
UIImageView* flakeView = [[UIImageView alloc] initWithImage:flakeImage];
// use the random() function to randomize up our flake attributes
int startY = round(random() % 320);
// set the flake start position
flakeView.center = CGPointMake(490, startY);
flakeView.alpha = 1;
// put the flake in our main view
[self.view addSubview:flakeView];
[UIView beginAnimations:nil context:flakeView];
// set up how fast the flake will fall
[UIView setAnimationDuration:7 ];
// set the postion where flake will move to
flakeView.center = viewToRotate.center;
// set a stop callback so we can cleanup the flake when it reaches the
// end of its animation
[UIView setAnimationDelegate:self];
[UIView commitAnimations];
我该如何解决这个问题? 如果有人可以帮助我,那将非常酷。
答案 0 :(得分:0)
CGRect具有交叉功能。 UIViews的框架是CGRects。
if (CGRectIntersectsRect(view1.frame, view2.frame) == 1)
NSLog(@"The views intersect");
else
NSLog(@"The views do not intersect");
我预见的问题是,如果rects有很多空格,它们在实际触摸之前会显得相交
其次,你应该切换到阻止动画。强烈鼓励
UIImageView* flakeView = [[[UIImageView alloc] initWithImage:flakeImage] autorelease];
// use the random() function to randomize up our flake attributes
int startY = round(random() % 320);
// set the flake start position
flakeView.center = CGPointMake(490, startY);
flakeView.alpha = 1;
// put the flake in our main view
[self.view addSubview:flakeView];
[UIView animateWithDuration:.7
animations:^ {
// set the postion where flake will move to
flakeView.center = viewToRotate.center;
};
这一切都来自记忆,不知道是否有错误。
圆形碰撞:
a ^ 2 + b ^ 2< c ^ 2表示它们发生碰撞
if(pow(view2.frame.origin.x - view1.frame.origin.x, 2) +
pow(view2.frame.origin.y - view1.frame.origin.y, 2) <
pow(view1.frame.size.width/2, 2))
{
//collision
}
else
{
//no collision
}
同样,所有内存,请检查您自己的错误
答案 1 :(得分:0)
我写了http://itunes.apple.com/us/app/balls/id372269039?mt=8,有一点二年级的经验。如果您检查该应用程序,您将看到一些相同的问题。这个话题是一个非常深的兔子洞。当我启动该应用程序时,我甚至不知道如何编写一个像样的游戏循环。您首先需要这样做,因为您需要进行精确的时间步长计算。 AFA碰撞,您需要单独更新模型和视图,因此如果更新模型和对象重叠,则需要将它们备份直到它们不发生碰撞,然后使用结果更新视图。如果你计划有很多碰撞对象,你可能会使用UIViews撞墙。更复杂的是,如果您的对象是圆形的,CGRectIntersectsRect将无法正常工作。这使得数学变得复杂,但这并不算太糟糕。有了我的应用程序,我发现很难让物理看起来很逼真。问题变成了球A和B重叠,所以你支持它们,然后他们现在交叉其他球等等。This链接是一个很好的起点,但有很多代码示例“几乎”工作。