【问题标题】:incompatible type for argument 2 of 'CGRectContainsPoint''CGRectContainsPoint' 的参数 2 的不兼容类型
【发布时间】:2011-05-23 04:55:12
【问题描述】:

长话短说……

我在所有 3 个 if 语句([rubin1 frame]、grid[x][y ].frame), ([rubin2 frame], grid[x][y].frame) 和 ([rubin3 frame], grid[x][y].frame)。我也尝试了 [grid[x][y] frame] 但得到了同样的错误。

我希望能够在网格上的 rubin 1、rubin2 和 rubin3 周围移动,直到我将它们释放到砖块上。当我将它们释放到砖块上时,我希望这块砖块以及与 rubin 留在的砖块相同类型的任何其他砖块消失(无论它们在网格上的哪个位置)

for (int y = 0; y < BRICKHEIGHT; y++)
{
    for (int x = 0; x < BRICKWIDTH; x++) 
    {


        if (CGRectContainsPoint([rubin1 frame], grid[x][y].frame)) {

            if(grid[x][y].tag == 1){

                ruby--;
                rubin1.alpha = 0;
                grid[x][y].alpha = 0;
                [self PlayerScore: x y: y];

            }
            else if(grid[x][y].tag == 2){

                ruby--;
                rubin1.alpha = 0;
                grid[x][y].alpha = 0;
                [self PlayerScore: x y: y];

            }
            else if(grid[x][y].tag == 3){

                ruby--;
                rubin1.alpha = 0;
                grid[x][y].alpha = 0;
                [self PlayerScore: x y: y];

            }
            else if(grid[x][y].tag == 4){

                ruby--;
                rubin1.alpha = 0;
                grid[x][y].alpha = 0;
                [self PlayerScore: x y: y];

            }
            else if(grid[x][y].tag == 5){

                ruby--;
                rubin1.alpha = 0;
                grid[x][y].alpha = 0;
                [self PlayerScore: x y: y];

            }
            else if(grid[x][y].tag == 6){

                ruby--;
                rubin1.alpha = 0;
                grid[x][y].alpha = 0;
                [self PlayerScore: x y: y];

            }


        } 
        if (CGRectContainsPoint([rubin2 frame], grid[x][y].frame)) {

            if(grid[x][y].tag == 1){

                ruby--;
                rubin2.alpha = 0;
                grid[x][y].alpha = 0;
                [self PlayerScore: x y: y];

            }
            else if(grid[x][y].tag == 2){

                ruby--;
                rubin2.alpha = 0;
                grid[x][y].alpha = 0;
                [self PlayerScore: x y: y];

            }
            else if(grid[x][y].tag == 3){

                ruby--;
                rubin2.alpha = 0;
                grid[x][y].alpha = 0;
                [self PlayerScore: x y: y];

            }
            else if(grid[x][y].tag == 4){

                ruby--;
                rubin2.alpha = 0;
                grid[x][y].alpha = 0;
                [self PlayerScore: x y: y];

            }
            else if(grid[x][y].tag == 5){

                ruby--;
                rubin2.alpha = 0;
                grid[x][y].alpha = 0;
                [self PlayerScore: x y: y];

            }
            else if(grid[x][y].tag == 6){

                ruby--;
                rubin2.alpha = 0;
                grid[x][y].alpha = 0;
                [self PlayerScore: x y: y];

            }

        } 
        if (CGRectContainsPoint([rubin3 frame], grid[x][y].frame)) {

            if(grid[x][y].tag == 1){

                ruby--;
                rubin3.alpha = 0;
                grid[x][y].alpha = 0;
                [self PlayerScore: x y: y];

            }
            else if(grid[x][y].tag == 2){

                ruby--;
                rubin3.alpha = 0;
                grid[x][y].alpha = 0;
                [self PlayerScore: x y: y];

            }
            else if(grid[x][y].tag == 3){

                ruby--;
                rubin3.alpha = 0;
                grid[x][y].alpha = 0;
                [self PlayerScore: x y: y];

            }
            else if(grid[x][y].tag == 4){

                ruby--;
                rubin3.alpha = 0;
                grid[x][y].alpha = 0;
                [self PlayerScore: x y: y];

            }
            else if(grid[x][y].tag == 5){

                ruby--;
                rubin3.alpha = 0;
                grid[x][y].alpha = 0;
                [self PlayerScore: x y: y];

            }
            else if(grid[x][y].tag == 6){

                ruby--;
                rubin3.alpha = 0;
                grid[x][y].alpha = 0;





            }
        }
    }
}

【问题讨论】:

    标签: iphone cocoa-touch xcode


    【解决方案1】:

    它需要一个点作为第二个参数,而不是帧 CGRect。试试 grid[x][y].frame.origin。原点为您提供框架 CGRect 的右上角,并 .size CGRect 的宽度/高度。

    【讨论】:

    • 你好!我意识到我做错了..这就是为什么它不起作用...我使用 CGRectContainsPoint 而不是使用 CGRectIntersectsRect。现在工作正常。感谢所有帮助
    【解决方案2】:

    你必须像这样使用。例如:

    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView:touch.view];
    
    if(CGRectContainsPoint(myimage.frame, location) == 0){
    //always end up here
    }
    

    【讨论】:

    • 这很好,除了确保引用 CGPoint 而不是 CGRect - 您还需要确保该点位于正确的坐标空间中。我实际上建议使用 [touch locationInView:[grid[x][y] superview]];这会将触摸点与网格项目容器的坐标空间进行比较。
    • 我明白了...感谢您的建议。今晚我会试一试,让你知道结果如何:)顺便说一句,我怎样才能获得其余的代码来删除网格上与我放置的相同类型的所有砖块rubin 还是你给我看的例子也做那件事?
    • 你好!我意识到我做错了..这就是为什么它不起作用...我使用 CGRectContainsPoint 而不是使用 CGRectIntersectsRect。现在工作正常。感谢所有帮助
    猜你喜欢
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 2018-09-07
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多