Я уверен, что это простой вопрос для любого, кто знает что-нибудь о математике и программировании (Cocos2D), но когда дело доходит до математики, я деревенский идиот.
В моей игре есть корабль, который летает в космосе. Корабль остается в центре экрана, и камера движется вместе с кораблем. Я пытаюсь добавить снаряды, которые стреляют с корабля и движутся с одинаковой скоростью, независимо от того, на какой скорости «движется» корабль.
Чтобы понять это, я пытался добавлять (10.0, 10.0) к месту моего спрайта-снаряда каждый шаг. Это работает (хотя это всегда идет в верхнем левом углу), однако, если я пытаюсь получить также добавить движение корабля или камеры к позиции спрайта, а также (10.0, 10.0), я получаю это совершенно неправильно.
Вот что я сейчас делаю:
CGPoint tempStep = ccpAdd(self.position, ccp(10.0, 10.0));
CGPoint tempSubStep = ccpSub(self.position, player.currentLocation);
NSLog(@"Difference: (%fx, %fy)", tempSubStep.x, tempSubStep.y);
CGPoint finalStep = ccpAdd(tempStep, tempSubStep);
// CGPoint tempSubStep = ccpSub(tempStep, player.currentLocation);
// CGFloat diff = ccpDistance(tempStep, player.currentLocation);
// CGPoint tempSubStep = ccpAdd(tempStep, ccp(diff, diff));
self.position = finalStep;
Вещи, которые закомментированы, - это некоторые из вещей, которые я пробовал (хотя есть много других вещей).
- self: Subclassed CCSprite
- player.currentLocation - это свойство сохраненного местоположения спрайта игрока. Свойство атомарно и назначено. Если это не так, пожалуйста, дайте мне знать.
Я попытался добавить снаряды в новый слой и переместить слой со спрайтом игрока, но в тот момент, когда спрайт игрока перемещается (и, следовательно, слой), мои снаряды исчезают. Я пробовал CCLayerColor и CCParallaxNode.
В итоге :
Я хотел бы сделать выстрел из позиции корабля. Я бы хотел, чтобы он удалялся от корабля с постоянной скоростью, независимо от движения корабля игрока после выстрела.
Пример: игрок движется к правой верхней части экрана (так сказать) и делает выстрел в том же направлении. Игрок не обгоняет снаряд, независимо от того, как быстро он летит. В качестве альтернативы, если игрок внезапно идет в противоположном направлении, снаряд, кажется, не ускоряется внезапно, а движется с, по-видимому, той же скоростью.
Спасибо за любую помощь, которую вы можете оказать.
EDIT:
Хорошо, я думаю, что получил это. Довольно просто на самом деле.
CGPoint tempStep = ccpAdd(self.position, _direction);
CGPoint playerDiff = ccpSub(player.currentLocation, _lastKnownPlayerLocation);
CGPoint finalStep = ccpAdd(tempStep, playerDiff);
self.position = finalStep;
_lastKnownPlayerLocation = player.currentLocation;
Теперь мне просто нужно выяснить, как получить радиус в пределах диапазона.