gpt4 book ai didi

ios - 可以检索用于创建 SKPhysicsBody 对象的参数吗?

转载 作者:行者123 更新时间:2023-11-29 10:52:45 25 4
gpt4 key购买 nike

是否可以检索用于创建 SKPhysicsBody 对象的参数而不单独保存它们?换句话说,有没有办法在创建后从以下对象中获取主体类型(即圆形、矩形、多边形)和相关信息(即半径、大小、路径):

SKPhysicsBody *circleBody = [SKPhysicsBody bodyWithCircleOfRadius:100.0];
SKPhysicsBody *rectangleBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(100.0, 100.0)];

SKPhysicsNode class reference 中似乎没有任何属性或方法沿着:

SKPhysicsBodyType type = circleBody.bodyType; // Doesn't exist
CGFloat radius = circleBody.radius; // Doesn't exist

令我惊讶的是,您可以在创建时将某些信息传递给 SKPhysicsBody 对象,而这些信息至少在以后无法通过只读属性获得。有什么想法吗?

最佳答案

您可以执行此操作的一种方法是分析 description 字符串。例如记录一个圆体打印这个:

<SKPhysicsBody> type:<Circle> representedObject:[(null)]

只要描述字符串在形状类型和 future 的 Sprite Kit 版本中保持一致,正则表达式搜索就可以完成这项工作。可能是脆弱的解决方案,但合法。

唯一的另一种方法是使用 ObjC 运行时来读取属性或 ivars。尽管这可能构成对私有(private) API 的使用,并且如果您在实时应用程序上执行此操作可能会导致应用程序被拒绝。

此代码记录所有私有(private) PKPhysicsBody 类的属性和 ivars。

SKPhysicsBody* circle = [SKPhysicsBody bodyWithCircleOfRadius:10];
NSLog(@"%@", circle);
NSLog(@"%@", NSStringFromClass([circle class])); // log the 'true' class name

unsigned int num;
objc_property_t* properties = class_copyPropertyList(NSClassFromString(@"PKPhysicsBody"), &num);
for (unsigned i = 0; i < num; i++)
{
objc_property_t property = properties[i];
NSLog(@"property: %s", property_getName(property));
}

Ivar* ivars = class_copyIvarList(NSClassFromString(@"PKPhysicsBody"), &num);
for (unsigned i = 0; i < num; i++)
{
Ivar ivar = ivars[i];
NSLog(@"ivar: %s", ivar_getName(ivar));
}

由此看来,_shapeType ivar 会为您提供所需的内容。

关于ios - 可以检索用于创建 SKPhysicsBody 对象的参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19760099/

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