2015-01-03 3 views
3

Я новичок в программировании Swift SpriteKit, и система координат сводит меня с ума. Я создаю спрайт, и я хочу переместить его в четыре угла экрана. Итак, я установил положение (0,0). Это находится в нижнем левом углу экрана. Через некоторое ручное тестирование я разработал диаграмму ниже. Нижние левые и верхние правые - это то, что сообщает симулятор iOS, когда я касаюсь экрана.Нижние левые координаты SKScene

У меня 2 вопроса:

1: Есть ли способ определения координат нижнего левого угла зрения? Возможно, я мог бы построить словарь с координатами и определить тип машины, а затем установить смещения. Но это много работы и может быть неточным для новых устройств. Кажется, что должно быть свойство сцены или рамки, которое я могу использовать для размещения объекта в левом нижнем углу окна.

2: Математика не работает. В iPhone5, 300 (нижний левый x) + 320 (ширина) = 620, а не сообщенный 727. Аналогичная проблема верна с координатами y. Как это работает?

Я установил как можно больше параметров. Я не изменил anchorPoint или позицию сцены.

 
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) 
+0

Суть в том, что я просто пытаюсь выяснить, когда спрайт покидает экран. Любая помощь будет оценена по достоинству. – JimF

+0

напишите свой код. координаты зависят от того, где вы перехватываете события касания (сцена или спрайт?), возможно, опорная точка (спрайт в позиции 0,0 будет иметь значение * по центру 0,02), сцену scalemode, как вы конвертируете координаты в пространство сцены/мира – LearnCocos2D

ответ

0

Аплодисменты для тяжелой работы! хах Если бы я собирался о получении значения для нижних координат, я хотел бы использовать CGRectGetMinX, чтобы получить координаты х и CGRectGetMinY получить у-координату также:

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

Затем, если вы хотите получить верхние координаты просто использовать одни и те же вещи, но сказать MaxX или MaxY. Да, координаты немного запутывают, но если вы их используете, тогда это будет легкий ветерок.

EDIT: Если вам нужно найти, если тело покинуло за пределами видимого пространства, до сих пор, что сработало для меня делает физику тела, чтобы обнаружить контакт с ним на краю

[SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame]

возможно другой вариант, который вы можете попробовать, - это увидеть границы объекта UIScreen.

+0

M321K: Спасибо за идею, но она возвращает точку (0,0) не (300,0) или что-то в этом роде. – JimF

+0

Я могу сказать, что средние точки точны XD, это действительно странно! Я только что открыл одну из моих игр, и у меня есть строка там, где указано floor.position = CGPointMake (CGRectGetMidX (self.frame), CGRectGetMinY (self.frame) + 5); Итак, я побежал, и, конечно, пол был виден внизу каркаса. Попробуйте проверить несколько объектов ... – MaxKargin

+0

Я нашел то же самое. Средние точки помещают объект в середину экрана. Но я не могу найти ничего, что скажет мне, когда объект покинет сцену.Я бы просто поместил объекты вокруг границы, но я не знаю, где это! – JimF

1

Хорошо, я думаю, что понял это. Установка scene! .scaleMode = SKSceneScaleMode.ResizeFill Позвольте мне идентифицировать четыре угла экрана. Итак, теперь я могу определить, когда спрайт пересекает край экрана. Это, похоже, не искажает мои изображения. Я еще не смог протестировать его на устройстве чтения, но он оставляет пустую область вокруг iPad2.