gpt4 book ai didi

iphone - 如何在运行时为 Cocos2D CCMenu menuWithItems 正确动态创建 va_list?

转载 作者:行者123 更新时间:2023-11-30 14:26:17 27 4
gpt4 key购买 nike

我在 CCMenu 类(class)中度过了一段非常愉快的时光。要使用此类创建菜单,它会强制您调用名为 initWithItems 的方法,该方法采用 va_list。我需要在运行时生成这个列表,我读到创建一个 C 数组并传递它可以像 va_list 在幕后一样运行,只是它失败了。

我在 va_list 中有一个 NSArray,其中包含我想要的项目,这些项目是 CCMenuItem 的子类,CCMenuItem 是 menuWithItems 期望在 va_list 中出现的类。如果您在编译时硬编码此列表,它可以正常工作,但我动态创建此列表的尝试不起作用。这有什么问题吗? MenuItemButton 是 CCMenuItem 子类。

NSArray *menuItems = [self getMenuItemsArray]; // Returns an NSArray of MenuItemButtons 
MenuItemButton *argList = (MenuItemButton *)malloc( sizeof(MenuItemButton *) * [menuItems count] );
[menuItems getObjects:(id *)argList];
CCMenuAdvanced* menu = [CCMenuAdvanced menuWithItems:argList];

这会在运行时崩溃,BAD_ACCESS。我知道 va_list 应该以 null 终止,我不知道调用 getObjects 后我的代码是否就是这种情况,或者这是否是问题所在。

最佳答案

您可以简单地使用 nil 初始化菜单。例如,

CCMenu * myMenu = [CCMenuAdvanced menuWithItems:nil];

然后假设您有一个在运行时加载的动态字符串列表,请尝试......

// replace this with a dynamically loaded array of items...
NSArray* dynamicArray = [NSArray arrayWithObjects:@"red", @"blue", @"green", nil];


for (NSString* item in dynamicArray)
{
CCMenuItem *menuItem = [CCMenuItemFont itemFromString: item target: self selector:@selector(menuCallback:)];
[myMenu addChild:menuItem];
}

关于iphone - 如何在运行时为 Cocos2D CCMenu menuWithItems 正确动态创建 va_list?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9283382/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com