Sprite Kit 和 Pathfinding,iPad 和 iPhone 的区别?
Posted
技术标签:
【中文标题】Sprite Kit 和 Pathfinding,iPad 和 iPhone 的区别?【英文标题】:Sprite Kit and Pathfinding, differences between iPad and iPhone? 【发布时间】:2014-10-28 20:05:07 【问题描述】:我想知道 iPad 和 iPhone 之间是否存在一些显着差异的设置? 我正在使用 Sprite Kit、SKD 8.1 和目标 ios 7.1 开发游戏。
游戏在测试期间使用 A* 寻路来移动我地图上的 2 个角色。 我遇到的问题是角色在寻找路径时。
在我的 iPad 4 (16gb) 上,当角色寻找路径时,寻路会冻结。 在我的 iPhone 6 和 iPhone 4 上,它可以完美运行。
它在模拟器(iPad Retina、iPhone 4 和 iPhone 6)上运行良好,并且游戏中没有卡顿,仅在我的 Ipad 4 上...
有什么我错过的吗?该游戏是为在 iPhone 和 iPad 上使用而开发的。 非常感谢任何帮助..
【问题讨论】:
Profile with Instruments 查看时间花在了哪里。这里没有任何人可以诊断您的问题的信息。 我是 xcode 的新手 :) 谢谢你的提示,我会在下班后做这个并发布更多信息 :) 【参考方案1】:-(NSArray*)nearbyBlocks:(SKNode*)blocks
NSMutableArray *tmp = [NSMutableArray arrayWithCapacity:4];
NSArray *leftB = [blocks.name componentsSeparatedByString:@"_"];
/* LEFT */
SKNode *b = [background childNodeWithName:[NSString stringWithFormat:@"block_%i_%i", [[leftB objectAtIndex:1] intValue]-1, [[leftB objectAtIndex:2] intValue]]];
if ([blockArrayWalk containsObject:b])
[tmp addObject:b];
/* RIGHT */
b = [background childNodeWithName:[NSString stringWithFormat:@"block_%i_%i", [[leftB objectAtIndex:1] intValue]+1, [[leftB objectAtIndex:2] intValue]]];
if ([blockArrayWalk containsObject:b])
[tmp addObject:b];
/* UP */
b = [background childNodeWithName:[NSString stringWithFormat:@"block_%i_%i", [[leftB objectAtIndex:1] intValue], [[leftB objectAtIndex:2] intValue]+1]];
if ([blockArrayWalk containsObject:b])
[tmp addObject:b];
/* DOWN */
b = [background childNodeWithName:[NSString stringWithFormat:@"block_%i_%i", [[leftB objectAtIndex:1] intValue], [[leftB objectAtIndex:2] intValue]-1]];
if ([blockArrayWalk containsObject:b])
[tmp addObject:b];
return [NSArray arrayWithArray:tmp];
我现在已经运行了 Time Profiler,当角色正在寻找路径时它会出现峰值。 childNodeWithName 的搜索为黄色,占 24%... 每次路径找到下一个块时都会调用 nearBlocks,因此根据路径长度多次调用。
问题是我需要使用 SKNodes,因为如果有人正在移除下面的块,char 可能会掉下来......可能很快就会放弃游戏想法;)
【讨论】:
以上是关于Sprite Kit 和 Pathfinding,iPad 和 iPhone 的区别?的主要内容,如果未能解决你的问题,请参考以下文章
游戏中的三角学——Sprite Kit 和 Swift 教程