SFML и C++ Уроки \ Разработка игр › Форумы › SFML System, Window и другие вопросы › Управление персонажем в игре с видом сверху
В этой теме 4 ответа, 4 участника, последнее обновление Павел Букреев 8 года/лет, 7 мес. назад.
-
АвторСообщения
-
Пытаюсь сделать игру – шутер с видом с верху. Просто для практики чтобы набраться опыта.
Пока код черновой, просто делаю, чтобы работало, а там уже корректировать буду.
Вообщем, по примеру уроков “перемещение в место клика” и “вращение по направлению к курсору” – задуманное получилось. Но если персонаж в нижней части экрана, то к курсору двигается по дуге и медленно, а если в верхней то быстро. Реализация движения к курсору в условном блоке на нажатие клавиши W:
C++123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778int main(){RenderWindow window(VideoMode(WINDOWWIDTH, WINDOWHEIGHT), "The Med Pixel");Thero hero("heroSprite.png", WINDOWWIDTH/2, WINDOWHEIGHT/2, 89.0, 79.0);Clock clock;int tempX, tempY = 0;float distance = 0;float CurrentFrame = 0;float mX, mY, rotation = 0;while (window.isOpen()){Event event;Vector2i pixelPos = Mouse::getPosition(window);Vector2f pos = window.mapPixelToCoords(pixelPos);float time = clock.getElapsedTime().asMicroseconds();clock.restart();time = time / 800;while (window.pollEvent(event)){if (event.type == Event::Closed)window.close();tempX = pos.x;tempY = pos.y;}mX = pos.x - hero.x;mY = pos.y - hero.y;rotation = (atan2(mY, mX)) * 180 / 3.14159265;hero.sprite.setRotation(rotation);if (Keyboard::isKeyPressed(Keyboard::A)) {hero.dir = 1; hero.speed = 0.2;CurrentFrame += 0.005*time;if (CurrentFrame > 7) CurrentFrame -= 7;hero.sprite.setTextureRect(IntRect(75 * int(CurrentFrame), 100, 75 , 100));}if (Keyboard::isKeyPressed(Keyboard::D)) {hero.dir = 0; hero.speed = 0.2;CurrentFrame += 0.005*time;if (CurrentFrame > 7) CurrentFrame -= 7;hero.sprite.setTextureRect(IntRect(75 * int(CurrentFrame), 100, 75, 100));}if (Keyboard::isKeyPressed(Keyboard::W)) {distance = sqrt((tempX - hero.x)*(tempX - hero.x) + (tempY - hero.y)*(tempY - hero.y));if (distance > 10){hero.dir = 3; hero.speed = 0.2;CurrentFrame += 0.005*time;if (CurrentFrame > 7) CurrentFrame -= 7;hero.x += 0.3*time*(tempX - hero.x) / distance;hero.y += 0.3*time*(tempY - hero.y) / distance;hero.sprite.setTextureRect(IntRect(75 * int(CurrentFrame), 100, 75, 100));}}if (Keyboard::isKeyPressed(Keyboard::S)) {hero.dir = 2; hero.speed = 0.2;CurrentFrame += 0.005*time;if (CurrentFrame > 7) CurrentFrame -= 7;hero.sprite.setTextureRect(IntRect(75 * int(CurrentFrame), 100, 75, 100));}hero.update(time);window.clear(Color::White);window.draw(hero.sprite);window.display();}return 0;};нужно подумать почему так происходит. скорее всего из за того, что игрек в этом месте больше. надо как то уровнять, возможно
PZSheplerSed это что за?
Heisenberg, это намек Павлу, что надо забанить этот аккаунт.
что-то спамеры атакуют в послед время )
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.