Ios 铸造不当?
我跟在后面。我一直在犯这个错误。我已经在显示的类(mainsecene.m)中导入了障碍物.h文件。我不知道我做错了什么Ios 铸造不当?,ios,objective-c,casting,cocos2d-iphone,spritebuilder,Ios,Objective C,Casting,Cocos2d Iphone,Spritebuilder,我跟在后面。我一直在犯这个错误。我已经在显示的类(mainsecene.m)中导入了障碍物.h文件。我不知道我做错了什么 - (void)spawnNewObstacle { CCNode *previousObstacle = [_obstacles lastObject]; CGFloat previousObstacleXPosition = previousObstacle.position.x; if (!previousObstacle) {
- (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'
障碍物
变量不包含类型为障碍物
的对象。相反,它保存类型为CCNode
的对象CCNode
没有名为-setUpRandomPosition
的方法,因此会出现运行时错误。在Objective-C中,强制转换是一个禁止操作。它除了帮助代码的读者了解编写代码的人的意图之外,什么都不做
这方面Objto-C与C++、java等语言不同。Objective-C有一个类似于编程语言“Smalltalk”的对象系统。
可能您没有在SpriteBuilder的“障碍物.ccb”中正确设置根节点的自定义类。这就是为什么你的“障碍.ccb”根节点是CCNode
而不是障碍
对象的原因。是什么让你认为强制转换改变了对象的类别??它所做的只是告诉编译器考虑类型是指定的。AFAIK障碍是CCBRead LoSouRy返回的节点的第一个孩子,我没有在一段时间内编写程序,而且我忘记了很多这些概念。你建议我做什么来修复它?使用相同的代码编写一个正确的CCNode类,该类具有您期望的代码,该示例运行良好have@LearnCocos2D这仅适用于loadAscene
。常规加载应返回SpriteBuilder根节点。