-1

我正在关注本教程。而且我不断收到这个铸造错误。我已经在显示的类 (MainScene.m) 中导入了 Obstacle.h 文件。我不知道我做错了什么

 - (void)spawnNewObstacle {
     CCNode *previousObstacle = [_obstacles lastObject];
     CGFloat previousObstacleXPosition = previousObstacle.position.x;

     if (!previousObstacle) {
         // this is the first obstacle
         previousObstacleXPosition = firstObstaclePosition;
     }

     Obstacle *obstacle = (Obstacle *)[CCBReader load:@"Obstacle"];
     obstacle.position = ccp(previousObstacleXPosition + distanceBetweenObstacles, 0);
     [obstacle setUpRandomPosition];
     [_physicsNode addChild:obstacle];
     [_obstacles addObject:obstacle];
 }

错误:

-[CCNode setUpRandomPosition]: unrecognized selector sent to instance 0x9a88a30
2014-04-20 10:51:28.046 FlappyFlyl[2104:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CCNode setUpRandomPosition]: unrecognized selector sent to instance 0x9a88a30'
4

2 回答 2

1

可能您没有在 SpriteBuilder 的“Obstacle.ccb”中正确设置根节点的自定义类。这就是为什么你的“Obstacle.ccb”根节点是一个CCNode而不是一个Obstacle对象。

于 2014-04-20T22:39:05.853 回答
0

obstacle变量不包含类型的对象Obstacle。相反,它拥有一个类型为 的对象CCNodeCCNode没有名为 的方法-setUpRandomPosition,因此会出现运行时错误。在 Objective-C 中,强制转换是无操作的。除了帮助您的代码读者了解编写代码的人的意图之外,它不会做任何事情。

在这方面,Objective-C 与 C++ 或 Java 等语言不同。Objective-C 有一个类似于编程语言“Smalltalk”的对象系统。

于 2014-04-20T17:48:35.120 回答