SKNode 是场景中的节点。
初始化方法
- (instancetype)init;//初始化空白
+ (instancetype)node;//创建一个新节点
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder ;//从 .sks 文件初始化节点时调用。
+ (nullable instancetype)nodeWithFileNamed:(NSString*)filename;//通过从游戏的主包加载存档文件来创建一个新节点。
+ (nullable instancetype)nodeWithFileNamed:(NSString *)filename securelyWithClasses:(NSSet<Class> *)classes andError:(NSError **)error;//通过从游戏的主包加载存档文件来创建一个新节点。
在场景中定位内容
@property (nonatomic) CGPoint position;//节点在其父坐标系中的位置。
查询内容大小
@property (nonatomic, readonly) CGRect frame;
- (CGRect)calculateAccumulatedFrame;//返回父节点坐标系中的一个矩形,其中包含自身和所有子节点的位置和大小。
配置加载顺序
@property (nonatomic) CGFloat zPosition;//节点相对于其父节点的高度。(Z轴上的位置)
缩放和旋转
@property (nonatomic) CGFloat zRotation;//围绕 z 轴的欧拉旋转(以弧度为单位)。
- (void)setScale:(CGFloat)scale;//设置节点的和属性。xScaleyScale
@property (nonatomic) CGFloat xScale;//乘以节点及其子节点的宽度的缩放因子。
@property (nonatomic) CGFloat yScale;//乘以节点及其子节点高度的缩放因子。
访问相关节点
@property (nonatomic, readonly, nullable) SKScene* scene;//包含此节点的场景节点。
@property (nonatomic, readonly, nullable) SKNode *parent;//节点的父节点。
@property (nonatomic, readonly) NSArray<SKNode*> *children;//所有子节点
修改节点树
- (void)addChild:(SKNode *)node;//加入。
- (void)insertChild:(SKNode *)node atIndex:(NSInteger)index;//自指定位置加入。
- (BOOL)isEqualToNode:(SKNode *)node;//比较参数节点到接收节点。
- (void)moveToParent:(SKNode *)parent;//移动节点在场景中一个新的父节点。
- (void)removeFromParent;//从其父节点中删除接收节点。
- (void)removeAllChildren;//移除所有
- (void)removeChildrenInArray:(NSArray<SKNode*> *)nodes;//批量移除。
- (BOOL)inParentHierarchy:(SKNode *)parent;//返回一个布尔值,指示该节点是否是目标节点的后代。
通过名字来访问节点
@property (nonatomic, copy, nullable) NSString *name;//节点标识
- (nullable SKNode *)childNodeWithName:(NSString *)name;//搜索子节点中特定名称的节点。
- (void)enumerateChildNodesWithName:(NSString *)name usingBlock:(void (^)(SKNode *node, BOOL *stop))block;//搜索接收节点的子节点以对共享名称的节点执行处理。
- (NSArray<SKNode*> *)objectForKeyedSubscript:(NSString *)name;//返回匹配名称参数节点的数组。
改变节点能见度
@property (nonatomic) CGFloat alpha;//透明度
@property (nonatomic, getter = isHidden) BOOL hidden;隐藏
动作
- (void)runAction:(SKAction *)action;//加入一个动作到动作列表中。
- (void)runAction:(SKAction *)action completion:(void (^)(void))block;//加入一个动作到动作列表中。完成回掉。
- (void)runAction:(SKAction *)action withKey:(NSString *)key;//添加一个节点执行的可识别的动作列表。
@property (nonatomic) CGFloat speed;//速度倍增器应用于在此节点上运行的所有操作。被它的孩子们继承。
@property (nonatomic, getter = isPaused) BOOL paused;//控制是否更新或暂停节点的操作。
- (nullable SKAction *)actionForKey:(NSString *)key;//返回与特定键相关的动作。
- (void)removeActionForKey:(NSString *)key;//删除与特定键相关的动作。
- (BOOL)hasActions;//返回一个布尔值,指示节点是否正在执行的行动。
- (void)removeAllActions;//删除该节点的所有行动。
添加物理行为
@property (nonatomic, retain, nullable) SKPhysicsBody *physicsBody;//模拟的物理范围默认为nil
约束节点位置或旋转
@property (nonatomic, copy, nullable) NSArray<SKConstraint*> *constraints;//约束是在动作和物理之后评估每个帧。节点的变换将被更改以满足约束。
@property (nonatomic, copy, nullable) SKReachConstraints *reachConstraints;//运动学约束,用于IK求解
手动检测碰撞
- (BOOL)intersectsNode:(SKNode *)node;//返回一个布尔值,指示此节点是否相交指定的节点。
添加GameplayKit行为
GameplayKit
处理用户输入
@property (nonatomic, getter=isUserInteractionEnabled) BOOL userInteractionEnabled;//是否有交互
@property (nonatomic) SKNodeFocusBehavior focusBehavior;//确定该节点如何参与焦点系统
命中测试
- (BOOL)containsPoint:(CGPoint)p;//点是否在节点内。
- (SKNode *)nodeAtPoint:(CGPoint)p;//返回给定点上的节点本身或子节点。如果返回接收器,则在给定点没有子节点。
- (NSArray<SKNode*> *)nodesAtPoint:(CGPoint)p;//返回相交点所有可见的后代组成的数组。
之间的转换协调不同节点的系统
- (CGPoint)convertPoint:(CGPoint)point fromNode:(SKNode *)node;//将一个点从节点树中另一个节点的坐标系转换为该节点的坐标系。
- (CGPoint)convertPoint:(CGPoint)point toNode:(SKNode *)node;//将此节点坐标系中的一个点转换为节点树中另一个节点的坐标系。
添加自定义数据而不进行子类化
@property (nonatomic, retain, nullable) NSMutableDictionary *userData;//节点数据
提供可访问性
一、 SKPhysicsBody(物理范围相关)
从形状创建实体(以下方法在场景中都有实际的物理范围。可以发生碰撞)
+ (SKPhysicsBody *)bodyWithCircleOfRadius:(CGFloat)r;//创建一个以节点原点为中心的半径为r的圆。
+ (SKPhysicsBody *)bodyWithCircleOfRadius:(CGFloat)r center:(CGPoint)center;//创建一个半径为r的圆,圆心位于节点的坐标空间中的一点。
+ (SKPhysicsBody *)bodyWithRectangleOfSize:(CGSize)s;//创建一个以节点原点为中心的指定大小的矩形。
+ (SKPhysicsBody *)bodyWithRectangleOfSize:(CGSize)s center:(CGPoint)center;//创建一个以节点坐标空间中的某一点为中心的指定大小的矩形。
+ (SKPhysicsBody *)bodyWithPolygonFromPath:(CGPathRef)path;//该路径必须代表一个反顺时针弯曲且无自交的凸或凹多边形。位置是相对于节点原点的。
从纹理创建身体
+ (SKPhysicsBody *)bodyWithTexture:(SKTexture*)texture size:(CGSize)size;//从纹理的内容创建一个物理体。
+ (SKPhysicsBody *)bodyWithTexture:(SKTexture*)texture alphaThreshold:(float)alphaThreshold size:(CGSize)size;//从纹理的内容创建物理体,仅捕获超过指定透明度值的纹素。
从实体集合创建实体
+ (SKPhysicsBody *)bodyWithBodies:(NSArray<SKPhysicsBody*> *)bodies;//创建一个物理实体,其形状类似于参数物理实体的联合。
创建基于边缘的物理体(用物理物体无法穿透的障碍物来限制场景)
+ (SKPhysicsBody *)bodyWithEdgeLoopFromRect:(CGRect)rect;//从矩形创建循环边。
+ (SKPhysicsBody *)bodyWithEdgeFromPoint:(CGPoint)p1 toPoint:(CGPoint)p2;//在两点之间创建一条边。
+ (SKPhysicsBody *)bodyWithEdgeLoopFromPath:(CGPathRef)path;//从路径创建循环边。(边缘没有体积,用于创建静态环境。边缘可以与实体碰撞,但不会相互碰撞。
)
+ (SKPhysicsBody *)bodyWithEdgeChainFromPath:(CGPathRef)path;//从路径创建边链。(边缘没有体积,用于创建静态环境。边缘可以与实体碰撞,但不会相互碰撞。
)
定义力如何影响物理体
@property (nonatomic, assign) BOOL affectedByGravity;//指示此物理实体是否受物理世界重力的影响。
@property (nonatomic) BOOL allowsRotation;//指示物理体是否受到施加到它的角力和脉冲的影响。
@property (nonatomic, getter = isDynamic) BOOL dynamic;//物理体是否被物理模拟移动。
定义物理体的物理属性
//单位任意,只要在场景中统一即可
//密度和质量是内在相关的,改变一个另一个也会变化。
@property (nonatomic) CGFloat mass;//身体的质量。
@property (nonatomic) CGFloat density;//身体的密度。
@property (nonatomic, readonly) CGFloat area;//身体的区域。
@property (nonatomic) CGFloat friction;//确定物理体表面的“粗糙度”(0.0 - 1.0)。默认为0.2
@property (nonatomic) CGFloat restitution;//决定物理体的“弹性”(0.0 - 1.0)。默认为0.2
@property (nonatomic, assign) CGFloat linearDamping;//可选地减少身体的线速度每一帧模拟流体/空气摩擦。值应为零或更大。默认为0.1。
@property (nonatomic, assign) CGFloat angularDamping;//可选地减少身体的角速度每一帧模拟旋转摩擦。(0.0 - 1.0)。默认为0.1
处理碰撞和接触
@property (nonatomic, assign) uint32_t categoryBitMask;//定义这个主体属于什么逻辑“类别”。默认设置为所有位(所有类别)。
@property (nonatomic, assign) uint32_t collisionBitMask;//定义这个物体对碰撞做出反应的逻辑“类别”。默认设置为所有位(所有类别)。
@property (nonatomic) BOOL usesPreciseCollisionDetection;//用于确定物理世界是否使用迭代碰撞检测算法。
@property (nonatomic, assign) uint32_t contactTestBitMask;//定义该body生成交集通知的body的逻辑“类别”。默认清除所有位(没有类别)。
- (NSArray<SKPhysicsBody*> *)allContactedBodies;//返回当前与这个skphysicsbody接触的所有skphysicsbody数组
对物理体施加力和冲量
- (void)applyForce:(CGVector)force;//向物理体的重心施加力。
- (void)applyForce:(CGVector)force atPoint:(CGPoint)point;//向物理体的特定点施加力。
- (void)applyTorque:(CGFloat)torque;//向物体施加扭矩。
- (void)applyImpulse:(CGVector)impulse;//向物理体的重心施加脉冲。
- (void)applyImpulse:(CGVector)impulse atPoint:(CGPoint)point;//将脉冲应用于物理体的特定点。
- (void)applyAngularImpulse:(CGFloat)impulse;//施加一个脉冲,将角动量传递给一个物体。
检查物理体的位置和速度
@property (nonatomic) CGVector velocity;//物理体的速度矢量,以米/秒为单位。
@property (nonatomic) CGFloat angularVelocity;//物理体的角速度。
@property (nonatomic, getter = isResting) BOOL resting;//指示对象在物理模拟中是否处于静止状态。
其他
@property (nonatomic, readonly, weak, nullable) SKNode *node;//此主体连接到的节点。
@property (nonatomic, readonly) NSArray<SKPhysicsJoint*> *joints;//连接到这个物理体的关节。
@property (nonatomic, assign) uint32_t fieldBitMask;//定义哪些类别的物理场可以对这个物理体施加力的掩码。
@property (nonatomic) CGFloat charge;//指定物体上的电荷。电荷决定了物体受电荷影响的程度电场和磁场。注意,这是一个无单位的数量,它是由开发人员适当设置电荷和场强。默认为0.0。
@property (nonatomic) BOOL pinned;//指示物理体的节点是否固定到其父节点。
二、 SKTexture(纹理)
初始化
+ (instancetype)textureWithImageNamed:(NSString *)name;//从图像对象创建一个新的纹理对象。
+ (instancetype)textureWithRect:(CGRect)rect inTexture:(SKTexture *)texture;//创建一个纹理,它是一个现有纹理的子实体。
+ (instancetype)textureVectorNoiseWithSmoothness:(CGFloat)smoothness size:(CGSize)size;//创建一个包含方向噪声的纹理。
+ (instancetype)textureNoiseWithSmoothness:(CGFloat)smoothness size:(CGSize)size grayscale:(BOOL)grayscale;//创建一个新纹理,其内容是程序生成的颜色噪声数据。
+ (instancetype)textureWithCGImage:(CGImageRef)image;//从 Quartz 2D 图像创建一个新的纹理对象。
其他
- (CGSize)size;//获取纹理的大小。
- (CGRect)textureRect;//用于选择你想要显示的纹理区域。原点和大小都应该在0.0 - 1.0范围内,超出这个范围的值会产生不可预测的结果。默认为整个纹理{(0,0)(1,1)}。
@property (nonatomic) SKTextureFilteringMode filteringMode;//当纹理不按本机大小绘制时,应该使用的过滤模式。
@property (nonatomic) BOOL usesMipmaps;//指示纹理是否尝试生成 mipmap。
- (CGImageRef)CGImage;//将纹理的图像数据作为 Quartz 2D 图像返回。
+ (void)preloadTextures:(NSArray<SKTexture*> *)textures withCompletionHandler:(void(^)(void))completionHandler;//在一个纹理数组上启动一个纹理预加载操作
- (void)preloadWithCompletionHandler:(void(^)(void))completionHandler;//请求在下一次渲染更新时使用回调处理程序将这个纹理加载到vram中。
网友评论