JimF
JimF

Reputation: 171

Lower Left Coordinates of SKScene

I'm new to Swift SpriteKit programming and the coordinate system is driving me crazy. I create a sprite and I want to move it to the four corners of the screen. So, I set the position to (0,0). That's off the bottom left corner of the screen. Through some manual testing I've developed the chart below. The lower left and upper right are what the iOS simulator report when I touch the screen.

I have 2 questions:

1: Is there a method of determining the coordinates of the lower left hand corner of the view? Maybe I could build a dictionary with the coordinate values and the determine the machine type and then set the offsets. But, that's a lot of work and might not be accurate for new devices. It just seems that there should be a scene or frame property that I can use to put an object at the bottom left of the window.

2: The math doesn't work. In the iPhone5, 300 (lower left x) + 320 (width) = 620, not the reported 727. Same issue is true with the y coordinates. How does this work?

I set as few parameters as possible. I have not changed the anchorPoint or position of the scene.

Device      Size            LL      UR
iPhone4s    (320,480)   (260,0) (766,764)
iPhone5     (320,568)   (300,0) (727,764)
iPhone5s    (320,568)   (298,0) (727,764)
iPhone6     (375,667)   (297,1) (728,765)
iPhone6plus (414,736)   (298,0) (728,766)
iPad2       (768,1024)  (226,0) (800,768)
iPad Air    (768,1024)  (224,0) (800,767)
iPad Retina (768,1024)  (225,0) (800,768)

Upvotes: 3

Views: 1474

Answers (2)

JimF
JimF

Reputation: 171

Ok, I think I figured this out. Setting scene!.scaleMode=SKSceneScaleMode.ResizeFill allow me to identify the four corners of the screen. So, now I can determine when a sprite crosses the edge of the screen. This doesn't seem to distort my images. I haven't been able to test it on a read device yet, but it leaves a blank area around the iPad2.

Upvotes: 2

MaxKargin
MaxKargin

Reputation: 1545

Applause for the hard work! haha If I was going about getting values for the lower coordinates, I would use CGRectGetMinX to get the x-coordinate and CGRectGetMinY to get the the y-coordinate likewise:

CGPoint minimum = CGPointMake(CGRectGetMinX(self.frame),CGRectGetMinY(self.frame));

Then, if you wanted to get the top coordinates just use the same things but say MaxX or MaxY. Yeah, the coordinates are a bit confusing but if you use those then it will be a breeze.

EDIT: If you need to find if a body has exited outside visible space, so far what has worked for me is making a physics body to detect contact with it on the edge

[SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame]

possibly another option you could try is to see the bounds of a UIScreen object.

Upvotes: 0

Related Questions