Я использую SpriteKit и работаю над системой перемещения SKSpriteNodes по экрану. У меня есть две глобальные переменные, которые задаются до того, как вызывается метод перемещения: positionAndMovementX и positionAndMovementY, которые я пробовал как целые числа, так и float. Перед вызовом метода, который вызывает мой SKSpriteNode, обе эти переменные будут установлены либо 0, 80, либо -80. Тогда я бегу:Использование SKAction moveByX: y: duration: создает неточное местоположение (используя SpriteKit)
if (emptySpace.position.x == yellowBug.position.x + positionAndMovementX &&
emptySpace.position.y == yellowBug.position.y + positionAndMovementY)
{
SKAction *moveLeft = [SKAction moveByX:positionAndMovementX y:positionAndMovementY duration:.1];
[yellowBug runAction: moveLeft];
}
К сожалению, это будет работать в течение нескольких движений, но после того, как 5 или так, либо х, либо значение у будет неточным и уменьшение или увеличение на .000015 или что-то, так что теперь вместо 200, 180, 200, 179.999985, и мое уравнение больше не будет оценивать. Я попытался изменить положение по отношению к целому и обратно, но 179.999985 был изменен на 179 вместо 180 по какой-то причине, поэтому я попытался округление следующим образом:
int posX = lroundf(yellowBug.position.x);
int posY = lroundf(yellowBug.position.y);
[yellowBug setPosition:CGPointMake(posX, posY)];
, но это только кажется, чтобы оставить переменную в 179.999985 снова. .. Помогите? (извините, если это вопрос о нобе, я все еще новичок)
Ok, надеялся избегать делать что-то подобное, но если это неизбежно ... Почему мое переназначение не вышло из любопытства? ** он работает сейчас :) – MadShark
Поскольку вы просите фреймворк корректировать значение с течением времени, он, вероятно, делает разделение (чтобы сократить общую сумму дельта на определенное количество кадров). Не все числа могут быть представлены точно с помощью «float»; разделение может произвести крошечную ошибку округления, которая может быть видна только в 12-м знаке после запятой или около того. В этом случае, во многих кадрах, даже небольшая ошибка, в конечном счете, станет видимой в меньших десятичных знаках. –