gpt4 book ai didi

ios - CGRectIntersectsRect : how change the detection to the edge of the picture inside UIImageView

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:05:22 24 4
gpt4 key购买 nike

这是我用来检测 2 个 UIImageViews 是否相互碰撞的代码。

 if (CGRectIntersectsRect(Appy.frame, Bottom.frame)) {
[self GameOver];
}

此时正在检测物体的边缘。

我如何更改它以检测 UIImageView 内图像的边缘。

里面的图像有一个透明的背景,并且“实际上是圆形的”,所以如果 UIImageView 的角碰到另一个 UIImageView 的角,它们就会发生碰撞,但图像实际上并没有碰到,所以它让事情看起来有点“困惑”

编辑*

Errors im getting

这些是我得到的错误

enter image description here这是我的.h


编辑:下面是我的代码现在的样子

.m 方法

if (CGRectIntersectsRect([self: RectBox:Appy].frame, Bottom.frame)) {
[self GameOver];
}

.h

-(UIImageView *)RectBox:(UIImageView *)box;

为了确定,我把它放在我的 .h 中最后一个 @end 的上面。

我仍然“正在使用未声明的标识符‘RectBox’”

编辑

Debug screem

编辑

这里是我调用方法的代码

-(void) PipeMoving2{

PipeTop2.center = CGPointMake(PipeTop2.center.x -2, PipeTop2.center.y);
PipeBottom2.center = CGPointMake(PipeBottom2.center.x -2, PipeBottom2.center.y);





if (PipeTop2.center.x < -53+33) {
[self PlacePipe2];
}

if (PipeTop2.center.x == 62) {
[self Score];
}


if (CGRectIntersectsRect(Appy.frame, PipeTop2.frame)) {
[self GameOver];
}

if (CGRectIntersectsRect(Appy.frame, PipeBottom2.frame)) {
[self GameOver];
}

if (CGRectIntersectsRect(Appy.frame, Top.frame)) {
[self GameOver];
}

if (CGRectIntersectsRect([self RectBox:Appy].frame, Bottom.frame)) {
[self GameOver];
}

}

我想这就是您需要看到的全部内容吧?

最佳答案

将其更改为以下内容:

if(CGRectIntersectsRect([self RectBox:Image].frame, Bottom.frame))

我从你的图片中注意到的另一件事是你将方法放在另一个方法中。

例如:(我从你的图片中看到的,似乎)

- (void)yourMethod
{
......
if (CGRectIntersectsRect([self RectBox:Image].frame, Bottom.frame))
{
[self GameOver];
}
.....
//etc etc

//and then you have this
-(UIImageView *)RectBox:(UIImageView *)box
{
box.frame = CGRectMake(box.frame.origin.x +15,
box.frame.origin.y +15,
box.frame.size.width -30,
box.frame.size.height-30);
return box;
}

....
}

你应该提取它并将它放在你的方法之外,所以它变成:

- (void)yourMethod
{
......
if (CGRectIntersectsRect([self RectBox:Image].frame, Bottom.frame))
{
[self GameOver];
}
.....
//etc etc
....
}

//take it out and place it here, for example

- (UIImageView *)RectBox:(UIImageView *)box
{
box.frame = CGRectMake(box.frame.origin.x +15,
box.frame.origin.y +15,
box.frame.size.width -30,
box.frame.size.height-30);
return box;
}

更新评论中与原始问题不完全相关的问题,但这是我从您的代码中发现的:

你的角色改变大小的原因可能源于你在你的 RectBox 方法中改变它的 frame

这里是该方法的粗略重新定义,以便我们可以“保留”角色的框架:

- (CGRect)RectBox:(UIImageView *)box
{
CGRect tempRect = CGRectMake(box.frame.origin.x +15,
box.frame.origin.y +15,
box.frame.size.width -30,
box.frame.size.height-30);
return tempRect;
}

并对调用进行更改。

例如:

if (CGRectIntersectsRect([self RectBox:Image], Bottom.frame)) 
{
[self GameOver];
}

关于运动,请检查您为 NSTimer 设置的频率。我不会比 0.1 更频繁。

希望这对您有所帮助。

关于ios - CGRectIntersectsRect : how change the detection to the edge of the picture inside UIImageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23979888/

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