SFML и C++ Уроки \ Разработка игр › Форумы › SFML System, Window и другие вопросы › Вопросы по уроку № 20 Притяжение персонажа к земле
В этой теме 4 ответа, 2 участника, последнее обновление Dracula 8 года/лет, 11 мес. назад.
-
АвторСообщения
-
Добрый вечер! Подскажите как восстановить анимацию персонажа при создании функции управления (void control):
void control(){
if (Keyboard::isKeyPressed(Keyboard::Left)) {
state = left;
speed = 0.1;
}
if (Keyboard::isKeyPressed(Keyboard::Right)) {
state = right;
speed = 0.1;
}
if ((Keyboard::isKeyPressed(Keyboard::Up)) && (onGround)) {
state = jump; dy = -0.4; onGround = false;
}
if (Keyboard::isKeyPressed(Keyboard::Down)) {
state = down;
speed = 0.1;
}
}Перепробовал много способов, но почему-то везде провал:( Может быть нужно в функции void update прописать новый логический блок под анимацию, но как это сделать я не знаю.
Так же возник вопрос по состоянию объекта jump. Как увеличить высоту прыжка?
Заранее спасибо за ответ!
jump просто делать меньше dy. т.е dy чем меньше при прыжке, тем выше прыгнешь.
про анимацию можно расписать если state == left, то давать такую то анимацию (описать это в ф ции анимации в этом же классе, и потом вызвать эту фцию анимации в update ф ции этого класса)
Спасибо!
Прописал так:
void control(){
if (Keyboard::isKeyPressed(Keyboard::Left)) {
state = left;
speed = 0.2;
if (state == left) {
currentFrame += 0.005*time;
if (currentFrame > 3) currentFrame -= 3;
sprite.setTextureRect(IntRect(150 * int(currentFrame)+150, 0, -150, 150));
}
}
if (Keyboard::isKeyPressed(Keyboard::Right)) {
state = right;
speed = 0.2;
if (state == right) {
currentFrame += 0.005*time;
if (currentFrame > 3) currentFrame -= 3;
sprite.setTextureRect(IntRect(150 * int(currentFrame), 0, 150, 150));
}
}Только еще в классе player пришлось объявить time и currentFrame, а так все работает. Отличные уроки у вас:)
Еще маленький вопрос, но уже не по уроку 20. Не смог до конца очистить спрайт от белого цвета. Проверил через paint, указал нужный код и большая часть цвета пропала, но вокруг самой анимации персонажа осталась тонкая линия. Не знаю как ее убрать. Может что посоветуете?
тайм можно брать тот, который уже есть в int main (как с update(time)). линию можно убрать в графическом редакторе, хоть в паинте. или программно. это уже вопрос для другой темы..
Все проблема решена. Спасибо за помощь!
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.