首先,作为免责声明,我是objective-c,xcode和cocos2d的新手。我在我的应用程序中找到了一种方便刷新屏幕的方法,但我不知道这是不好的做法。这就是我在做什么。我有一个名为Player的类,其中包含一个变量NSString * name。我在一个函数中使用此代码在屏幕上显示此变量和其他几个变量:
label = [CCLabelTTF labelWithString:string fontName:GLOBAL_FONT fontSize:font_size ];
label.color = color_back;
label.position = ccp(x+1, y-1);
[self addChild:label];
按下按钮时,我正在修改player-> name以及其他几个变量。因为当按下按钮时,几个变量正在改变(在这个屏幕上,最后是其他变量),我还设置了一个标志,指示需要刷新屏幕。然后我用调度程序检查这段代码:
if(panelPrev != currentPanel || refreshScreen) //do we need to initialize the panel?
{
[self removeAllChildrenWithCleanup:true]; //clear all objects from display
//Decide which objects to display
switch (G_display_panel) {
case P_Main:
[Display_Main init_Panel:self];
break;
case P_NewGame:
[Display_New init_Panel:self];
break;
default:
break;
}
refreshScreen = false;
}
我的第一个问题:这是一种可以接受的方式来向屏幕显示内容并刷新它们吗?它似乎比更新正在显示的每个变量更方便。按钮没有经常按下,所以我不关心性能。
第二:如果可以这样做,为什么当我按下按钮并更改player->名称的值时,我得到这个:“线程1:EXC_BAD_ACCESS(代码= 1,地址) = ...)“?如果我单步执行调试器,则值将正确分配给player->名称,并且屏幕刷新将起作用。但是,如果我让它运行,当我尝试访问player->名称并且数据看起来已损坏时会获得EXC_BAD_ACCESS(例如(NSString *)name = 0x15927f80,当我期待(NSString *)name = @“Bob”)
其他一些细节。
有什么想法吗?感谢。
答案 0 :(得分:0)
试试这个:
[self addChild:label];
答案 1 :(得分:0)
我弄明白了这个问题。这是一个内存管理问题。我使用此处指定的示例为变量添加了一个getter和setter:developer.apple.com/library/mac/documentation/Cocoa/Conceptual / ... -