Ну, вы объявляете скорость в вашем методе и не устанавливаете ее на что-либо. Так что всегда идёт установка скорости 10.0f. Потому что и в вашем if, и в другом случае вы устанавливаете его в 10, так какой смысл в операторе if?
Тогда вы rect.origin.x += speed;
или добавляете 10 источников все время, без исключений. Это то же самое, что и rect.origin.x += 10;
Изображение будет постоянно двигаться.
Скорость всегда будет равна 10, и всегда добавляется к rect.origin.x
Вы хотите сделать скорость переменной, а не просто в методе?
EDIT
Поскольку скорость объявляется в методе каждый раз, когда в качестве значения используется 0. Затем он устанавливается на 10. Если вы создаете скорость как переменную-член, то каждый раз, когда вызывается animateCharRight
, вы можете сделать что-то вроде
speed += speedIncrementAmount;
или
speed += 1.0f;
То есть каждый раз, когда скорость увеличивается на 1 единицу или то, что вам нужно для вашей игры.
Тогда вам понадобится пара проверок в зависимости от вашей логики.
if (speed > 10.0f)
{
// This will clamp the speed at 10.0f;
speed = 10.0f;
}
if (speed < - 10.0f)
{
// This will make sure you will never go left to quickly
speed = - 10.0f;
}
Выше, если заявления могут работать или не могут. Зависит от использования. Если игра является боковым скулером, и вы хотите двигаться только вправо, то вы можете убедиться, что скорость никогда не будет меньше 0.
Подумайте о дизайне, который вам нужен.
Поскольку вы новичок в программировании игр, я бы начал с Обучающего курса и опирался на навыки, усвоенные в учебном пособии. Здесь - это ссылка на ссылку, которую я нашел в быстром поиске Google.
Помните, никто не делает Doom как первую игру. Все начинают с разрыва кирпича или тетриса, это «Hello World» игрового программирования.