我對spritekit座標系非常困惑。我需要澄清兩起案件。SpriteKit中的座標系
案例1:
當一個精靈節點作爲子項添加到場景:
SKSpriteNode * blueBall = [SKSpriteNode spriteNodeWithImageNamed:@"hRedBall.png"];
[email protected]"blueball";
blueBall.size=CGSizeMake(75, 75);
blueBall.position=point; //I am varying this point
[self addChild:blueBall];
我加入了在不同的點節點的每個time.These是我加了點在節點:(100x100)(200x200)(300x300)(400x400)(900,600)
在我的iPhone 5的設備,他們是這樣的:
如果你看看100×100,當我在點(100,100)加雪碧,在設備上,當我登錄的節點位置,它給我(99.9,138.17)這與點(100,100)相比是巨大的差異。
儘管其他點也有變化,但我忽略了它們,因爲其他點的差別太小了。
-(void)didMoveToView:(SKView *)view {
/* Setup your scene here */
[self bounceTheBlueBallAtPoint:CGPointMake(100, 100)];
}
-(void)bounceTheBlueBallAtPoint:(CGPoint)point{
SKSpriteNode * blueBall = [SKSpriteNode spriteNodeWithImageNamed:@"hRedBall.png"];
[email protected]"blueball";
blueBall.size=CGSizeMake(75, 75);
blueBall.physicsBody=[SKPhysicsBody bodyWithCircleOfRadius:blueBall.frame.size.width/2];
blueBall.physicsBody.categoryBitMask=blueBallHitCategory;
blueBall.physicsBody.collisionBitMask=blueBallHitCategory|pinkBallHitCategory|wallHitCategory;
blueBall.physicsBody.contactTestBitMask=blueBallHitCategory|pinkBallHitCategory|wallHitCategory;
blueBall.physicsBody.dynamic=YES;
blueBall.physicsBody.affectedByGravity=NO;
blueBall.physicsBody.restitution=1.0;
blueBall.physicsBody.friction=0.0;
blueBall.physicsBody.linearDamping=0.0;
blueBall.physicsBody.angularDamping=0.0;
blueBall.position=point;
[self addChild:blueBall];
//applying impulse to bounce off
// CGVector impulse = CGVectorMake(30.0,60.0);
// [blueBall.physicsBody applyImpulse:impulse];
//
}
我檢查在這種方法中,球的位置:
-(void)update:(CFTimeInterval)currentTime {
/* Called before each frame is rendered */
[self checkSpriteMovement];
}
-(void)checkSpriteMovement{
[self enumerateChildNodesWithName:@"blueball" usingBlock:^(SKNode * _Nonnull node, BOOL * _Nonnull stop) {
SKSpriteNode *ball=(SKSpriteNode *)node;
if (ball.physicsBody.resting) {
NSLog(@"The ball position is %@",NSStringFromCGPoint(ball.position));
}
}];
}
案例2:
比方說,我有一個背景精靈節點,我的球節點添加到這個而不是將球節點添加到場景中。
_background = [SKSpriteNode spriteNodeWithImageNamed:@"parkImage.jpg"];
_background.size = self.frame.size; //frame size is (1024x768)
_background.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
[self addChild:_background];
,然後我將球節點添加到這個背景:
[_background addChild:blueBall];
這是添加了背景節點:
現在我試圖球加入到加背景:
點:(100,100):
在點:( - 280,-150)
我也想討論第三種情況:
案例3:
我想要另一個節點來精靈backgorund叫環。後來我想添加球到背景。所以會有2個子節點。
_ringNode=[SKSpriteNode spriteNodeWithImageNamed:@"hue_ring.png"];
_ringNode.size=CGSizeMake(80, 80);
_ringNode.position=CGPointMake(0, 0); //center point of background in this case
_ringNode.anchorPoint=CGPointMake(0.5,0.5);
_ringNode.name=kRingNodeName;
[_background addChild:_ringNode];
所以環將在這裏:
現在我想的球節點添加到背景節點:
我用同樣的代碼中添加球在點(-280,-150):
爲什麼場景和精靈節點的座標系有變化?
我面臨的另一個問題是:
雖然現場啓動節點不會添加到現場properly.Even,節點是不可見的用戶,但我可以看到的節點數它說屏幕上有節點。我需要再次運行代碼才能看到正確添加到場景中的節點。這種情況每4次發生一次。我只需要停止代碼並再次運行它以查看碎石上的球,否則我會看到沒有任何球的背景,儘管我將它們添加到背景中。
這是怎麼發生的?
,我將所有的節點didMoveToView
請顯示案例1的代碼。 – trojanfoe
代碼添加到案例1 @trojanfoe –
我不認爲這是案例1的代碼。它看起來像案例2。 – trojanfoe