Iphone CGPointMake!编码错误信息

Iphone CGPointMake!编码错误信息,iphone,xcode,message,Iphone,Xcode,Message,我正在开发一个简单的游戏应用程序,你必须将一个球从另一个球上移开。但是我的代码有问题,请帮忙。当我构建并运行它时,会收到两条错误消息。我不明白问题出在哪里 #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //(X speed, Y speed) vvv pos = CG

我正在开发一个简单的游戏应用程序,你必须将一个球从另一个球上移开。但是我的代码有问题,请帮忙。当我构建并运行它时,会收到两条错误消息。我不明白问题出在哪里

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
//(X speed, Y speed) vvv
pos = CGPointMake(5.0,4.0);///////// this part here I get an error message saying assigning to CGPoint * (aka 'struct CGPoint*') from incompatible type 'CGPoint' (aka 'struct CGPoint')
}

- (IBAction)start {
[startbutton setHidden:YES];
randomMain = [NSTimer scheduledTimerWithTimeInterval:(0.03) target:(self) selector:@selector(onTimer) userInfo:nil repeats:YES];

}

-(void)onTimer {
[self checkCollision];

enemy.center = CGPointMake(enemy.center.x+pos->x,enemy.center.y+pos->y);

if (enemy.center.x > 320 || enemy.center.x < 0)
    pos->x = -pos->x;

if (enemy.center.y > 480 || enemy.center.y < 0)
    pos->y = -pos->y;

}

-(void)checkCollision {

if( CGRectIntersectsRect(player.frame,enemy.frame))
{

[randomMain invalidate];
[startbutton setHidden:NO];

CGRect frame = [player frame];
frame.origin.x = 137.0f;
frame.origin.y = 326.0;
[player setFrame:frame];

CGRect frame2 = [enemy frame];
frame2.origin.x =137.0f;
frame2.origin.y = 20.0;
[enemy setFrame:frame2];

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"You Lost!" message:[NSString stringWithFormat:@"You Were Hit! Try Again"] delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
    [alert show];
    [alert release];

}



}

-(void)touchesMoved: (NSSet *)touches withEvent: (UIEvent *)event {
UITouch *myTOuch = [[event allTouches] anyObject];
player.center = [myTouch locationInView:self.view];      /////// Here also I get an error message saying Assigning to 'CGPoint' (aka struct CGPoint') form incompatible type 'id'

////////////////// Also with that error message is Class method '+locationalView' not found (return type defaults to 'id')
}

@end
#导入“ViewController.h”
@界面视图控制器()
@结束
@实现视图控制器
-(无效)viewDidLoad{
[超级视图下载];
//(X速度,Y速度)vvv
pos=CGPointMake(5.0,4.0);//这部分我从不兼容的类型“CGPoint”(又名“struct CGPoint”)中得到一条错误消息,表示分配给CGPoint*(又名“struct CGPoint*)
}
-(i动作)开始{
[开始按钮设置隐藏:是];
randomMain=[NSTimer scheduledTimerWithTimeInterval:(0.03)目标:(self)选择器:@selector(onTimer)userInfo:nil repeats:YES];
}
-(void)onTimer{
[自我检查碰撞];
敌方.center=CGPointMake(敌方.center.x+pos->x,敌方.center.y+pos->y);
如果(敌方.center.x>320 | |敌方.center.x<0)
pos->x=-pos->x;
if(敌方.center.y>480 | |敌方.center.y<0)
pos->y=-pos->y;
}
-(无效)检查碰撞{
如果(CGRectIntersectsRect(玩家帧,敌人帧))
{
[使失效];
[启动按钮设置隐藏:否];
CGRect帧=[播放器帧];
框架原点x=137.0f;
frame.origin.y=326.0;
[播放器设置帧:帧];
CGRect帧2=[敌方帧];
frame2.origin.x=137.0f;
frame2.origin.y=20.0;
[敌方设定帧:帧2];
UIAlertView*alert=[[UIAlertView alloc]initWithTitle:@“您丢失了!”消息:[NSString stringWithFormat:@“您被击中了!再试一次”]委托:无取消按钮:@“解除”其他按钮:无];
[警报显示];
[警报发布];
}
}
-(无效)触摸移动:(NSSet*)触摸事件:(UIEvent*)事件{
UITouch*myTOuch=[[event AllTouchs]anyObject];
player.center=[myTouch locationInView:self.view];//在这里,我还收到一条错误消息,说分配给“CGPoint”(也称为struct CGPoint)表单不兼容的类型“id”
//////////////////与该错误消息一起出现的还有未找到类方法“+locationalView”(返回类型默认为“id”)
}
@结束

在.h文件中,您是如何创建
pos
变量的? 我想你加了一个*:

CGPoint *pos;
移除*:

CGPoint pos;
编辑(感谢乔纳森·格林斯潘)

为什么使用->操作符?我个人从未在Objective-C代码中见过它。 尝试将它们更改为点:

if (enemy.center.x > 320 || enemy.center.x < 0)
    pos.x *= -1;
if(敌方.center.x>320 | |敌方.center.x<0)
位置x*=-1;

在.h文件中,您是如何创建
pos
变量的? 我想你加了一个*:

CGPoint *pos;
移除*:

CGPoint pos;
编辑(感谢乔纳森·格林斯潘)

为什么使用->操作符?我个人从未在Objective-C代码中见过它。 尝试将它们更改为点:

if (enemy.center.x > 320 || enemy.center.x < 0)
    pos.x *= -1;
if(敌方.center.x>320 | |敌方.center.x<0)
位置x*=-1;

当您在变量名和试图实例化对象的类之间看到*时,表示它是该对象的指针。当*不存在时,它不是指针而是硬值

您混淆了这些内容,忘记从.h文件中的CGPoint属性中删除*。解决了这个问题,错误就消失了


CGPoint*pos->CGPoint pos

当您在变量名和试图实例化对象的类之间看到*时,表示它是该对象的指针。当*不存在时,它不是指针而是硬值

您混淆了这些内容,忘记从.h文件中的CGPoint属性中删除*。解决了这个问题,错误就消失了


CGPoint*pos--->CGPoint pos

在您的ViewController.h文件中,编写以下声明

CGPoint pos;

在ViewController.m文件中,将pos.x替换为pos->x,将pos.y替换为pos->y。

在ViewController.h文件中,编写此声明

CGPoint pos;

在ViewController.m文件中,将pos.x替换为pos->x,将pos.y替换为pos->y。

代码段:UITouch*myTOuch=[[event AllTouchs]anyObject];大O是您在实际代码中犯的错误,还是仅仅在代码片段中犯的错误?因为您试图在myTouch上调用,而不是在myTOuchCode代码段上调用:UITouch*myTouch=[[event AllTouchs]anyObject];大O是您在实际代码中犯的错误,还是仅仅在代码片段中犯的错误?因为您试图在myTouch上调用,而不是在myTouch上调用,所以您可能也想对他使用箭头运算符(
->
)发表评论。@JonathanGrynspan&&Juzzz:the->在objective C中完全有效,它是从C/C++继承的。a->b表示:结构解除引用(“a指向的对象的成员b”),您也可以执行a->*b,这表示:a指向的对象的成员b指向。这并不意味着他这样做是有效的。只是说这没有错只是老了-school@TotumusMaximus如果
pos
CGPoint
而不是
CGPoint*
,则无效。它仍然只对指针和类似指针的类型有效。@JonathanGrynspan:因此我最后一句话说这对他来说不是nec。我只是告诉你这些操作员的存在,我很清楚他们。它们在这里不合适,这就是我的评论。可能还想评论一下他使用箭头运算符(
->
)的情况。@JonathanGrynspan&&Juzzz:the->在objective C中完全有效,它是从C/C++继承的。a->b表示:结构解除引用(“a指向的对象的成员b”),您也可以执行a->*b,这表示:a指向的对象的成员b指向。这并不意味着他这样做是有效的。只是说这没有错只是老了-school@TotumusMaximus如果
pos
CGPoint
而不是
CGPoint*
,则无效。它仍然只对指针和类似指针的类型有效。@JonathanGrynspan:因此我最后一句话说这对他来说不是nec。我只是告诉你这些操作员的存在,我很清楚他们。他们在这里不合适,这就是我的评论。