- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题总结:启动应用程序并按“新游戏”后,我使用 CCDirector
过渡到 GameScene。在那里,我添加 32 GamePiece
对象,其中这些对象按如下方式处理触摸事件:
@interface GamePiece : NSObject <CCTargetedTouchDelegate>{
CCSprite* sprite;
NSInteger row;
NSInteger column;
}
//-(void)moveToRow:(NSInteger)newRow column:(NSInteger)newColumn;
-(id)initWithRow:(NSInteger)aRow column:(NSInteger)aColumn tag:(NSInteger)tag parent:(CCNode*)parent;
+(id)gamePieceWithRow:(NSInteger)aRow column:(NSInteger)aColumn tag:(NSInteger)tag parent:(CCNode*)parent;
@end
GamePiece.m:
...
- (BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
CGPoint touchLocation = [GameScene locationFromTouch:touch];
CCLOG(@"(%i, %i)", row, column); //<-----THIS!!!
//Crash never makes it here....
// Check if this touch is on the Spider's sprite.
BOOL isTouchHandled = CGRectContainsPoint([sprite boundingBox], touchLocation);
if (isTouchHandled){
id parent = sprite.parent;
[parent gamePieceSelected:self inRow:row column:column];
}
return isTouchHandled;
}
...
- (void)dealloc {
[[CCTouchDispatcher sharedDispatcher] removeDelegate:self]; //Important...
[super dealloc];
}
@end
好的,所以在加载 32 个片段后,我使用以下方法加载更多片段:
[parent gamePieceSelected:self inRow:row column:column];
如下:(GameScene.m)
-(void)gamePieceSelected:(GamePiece*)aGamePiece inRow:(NSInteger)row column:(NSInteger)column{
[self removeChildByTag:18 cleanup:YES];
//Array of index Path!!! row = row, section = column
NSArray* moves = [self availableMovesForRow:row column:column];
for(NSIndexPath* index in moves){ //Please forgive me for using NSIndexPath!!
[GamePiece gamePieceWithRow:[index row] column:[index section] tag:18 parent:self];
}
}
基本上,当您点击 GamePiece
时,我添加其他GamePiece
标签 = 18 的对象。然后我使用此标签删除"new"GamePiece
对象,并添加其他对象..
我的问题?
录制 GamePiece
后,"new"游戏片段正常出现,但在我点击多次后它崩溃了!我的意思是,我点击 GamePiece
,新的游戏片段出现。然后,如果我点击另一个GamePiece
,我 Handlebars 放在心上等待崩溃。有时它会崩溃,有时则不会...第三次,第四次,第五次......等等。在崩溃之前我取得了 10 次点击的高分: P……太随意了……
我的理论:
参见评论行//<------THIS
,CCLOG
每次我点击屏幕时都会被调用任意次数,直到找到 GamePiece
满足 if 语句,这很正常,因为我有很多 GamePiece
同时加载的对象..
当它崩溃时(没有任何堆栈跟踪或消息),这个 CCLOG
被调用了几次,但从未在 if 语句中出现!我认为这是因为它试图向 GamePiece
发送触摸消息。已被 removeChildWithTag:
删除..但我已经打电话[[CCTouchDispatcher sharedDispatcher] removeDelegate:self];
在dealloc中,这就引出了一个非常重要的事实:
如果我在录制 GamePiece
后等待几秒钟在我点击另一个之前,我不崩溃的机会更高!!
感觉就像我给它时间来调用 dealloc,并删除触摸委托(delegate)...
编辑:我想到添加一个 CCLOG
在 dealloc 中,它从未被调用过......结束编辑
并且不确定这是否很明显,但如果我不删除新添加的 GamePieces,游戏永远不会崩溃......但我需要删除它们:P
请帮忙,我已经解决这个问题好几天了>。
最佳答案
这个!!:
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:-1 swallowsTouches:YES]; //Important...
这是有史以来最大的错误!!
这段简洁的代码:
[[CCTouchDispatcher sharedDispatcher] removeDelegate:self];
实际上保留了委托(delegate)...并且我从未达到 dealloc,也从未从触摸调度程序中删除Delegate并导致灾难...
<小时/>编辑:
好吧,有人想知道我最终在哪里删除了委托(delegate)!我很惊讶我没有提到这一点!
- (void)onExit {
[[CCTouchDispatcher sharedDispatcher] removeDelegate:self];
// Never forget this!!
[super onExit];
}
关于iphone - Cocos2D removeChildByTag 崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5120624/
我在将 OALSimpleAudio 导入我的 Cocos 2.X 项目时遇到了很多麻烦。 该应用程序相当大。 我将 Cocos 3.0 导入现有项目的最佳方式是什么? 最终错误如下所示: 这是我到目
Tensorflows object_detection 项目的 labelmaps 包含 90 个类,虽然 COCO 只有 80 个类别。 因此参数num_classes在所有示例配置中设置为 90
我正在使用Cocos2d-x v3.9,并且在iOS模拟器中看到某些行为,该行为仅在执行命令cocos run -p mac时出现。如果我通过XCode构建项目,则不会看到相同的行为。 Cocos和X
我正在使用 Cocos creator 创建一个仅适用于网络浏览器的简单游戏,并且需要实现一个分享到 twiiter 按钮。但我需要用普通的 javascript 来做到这一点。到目前为止,我有这段代
在我的 appDelegate 类中,我有类似这样的代码, while using cocos studio auto glview = director->getOpenGLView();
我有一个渲染循环,我想在后台运行,以便我可以控制播放循环的速度,使其动画缓慢或快速。现在,每次我想使用 Sprite 时,我都会使用 sleep 并在主线程中的 CCRenderTexture 上调用
下面是我的 HelloWorld.h 类: class HelloWorld : public cocos2d::CCLayer { public: HelloWorld(); // Here's a
我想在 cocos 2d 中用手指触摸画线。 -(void) ccTouchesMoved:(NSSet *)inappropriateTouches withEvent:(UIEvent *)eve
我是 cocos creator 和 JavaScript 编程的新手,最近 cocos creator 在其引擎中添加了“集成 Box2D 物理引擎”。我想知道我是否可以使用 ' liquidFun
我能够使用下面的代码和 COCO API 过滤图像,我为我需要的所有类多次执行此代码,这是类别 person 的示例,我这样做了用于 car 等 我现在要做的,是过滤数据集(instances_tra
我一直在检查这个detr repository类别总数为 100,但其中 10 个是空字符串,如图所示 here . 这背后有什么特别的原因吗? 最佳答案 基本上,COCO 数据集在其发布之前已在一篇
对于一个项目,我需要一个可以检测许多不同物体的检测器。为此,COCO 的 90 个类是不够的,因为我希望能够看到更多。 例如,我已经看到 imagenet 有更多的类,但是我找不到训练来检测 imag
在我的一个 iPhone 应用程序中,我需要查明该设备是否有互联网连接。有人帮忙吗? 最佳答案 使用可达性类。 if([self checkInternetConnected] ) {
我想用 Delphi 编写一个简单的编译器用于教育目的。我读过 Coco/R 并发现了 Delphi 的这个实现:http://code.google.com/p/dcocor/ 。据我所知,这是 D
关闭。这个问题需要更多 focused .它目前不接受答案。 想要改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 4 年前。 Improve this q
我正在尝试使用 https://github.com/jsbroks/coco-annotator 用 COCO 关键点注释图像以进行姿势估计。如安装部分所述,我克隆了存储库。我安装了 Docker
我正在使用 Mask-RCNN 并希望训练我自己的几类 coco 风格的数据集。一开始,我只有 2 个类(除了背景)。 虽然 Mask-RCNN 带有样本数据集,但它们要么只包含一个类,要么自己生成数
有谁知道如何更新Cocos 2D-x上的标签文本吗?我在cocos studio上创建了一个标签,现在我尝试通过我的代码访问和更改其内容。 我正在寻找 JavaScript 中的具体代码行,但我只在
我有一个 cocos2d-x 场景和上面的 Button。我尝试添加触摸事件监听器并为其提供回调函数: preloadScene.h: ... public: virtual void Do(Touc
我是cocos2d-js游戏开发的初学者,这两天正在学习。我尝试通过 cocos 命令运行我的项目,但它显示的 cocos 命令不被识别为内部或外部命令。我已按照此链接创建并运行项目 http://c
我是一名优秀的程序员,十分优秀!