Помечено: камера
В этой теме 2 ответа, 2 участника, последнее обновление AnatoliiD 4 года/лет, 9 мес. назад.
-
АвторСообщения
-
Решил привязать камеру к персонажу. координаты персонажа камера получает от управления персонажа, а она двигается только по диагонали влево и вправо, а при нажатии вверх или вниз не работает. подскажите, как правильно привязать камеру.
main.cpp
#include <SFML/Graphics.hpp>
#include <iostream>
#include “map.h”
#include “view.h”using namespace sf;
class Player {
private:
float x, y = 0;
public:
float w, h, dx, dy, speed;
int dir;
String File;
Image image;
Texture texture;
Sprite sprite;
Player(String F, float X, float Y, float W, float H) {
dx = 0; dy = 0; speed = 0; dir = 0;
File = F;
w = W; h = H;
x = X; y = Y;
image.loadFromFile(“images/” + File);
image.createMaskFromColor(Color(255, 0, 0));
texture.loadFromImage(image);
sprite.setTexture(texture);
sprite.setTextureRect(IntRect(0, 0, w, h));
};void Update(float time) {
switch (dir){
case 0: dx = 0; dy = -speed; break; // up
case 1: dx = 0; dy = speed; break; // down
case 2: dx = -speed; dy = 0; break; // left
case 3: dx = speed; dy = 0; break; // rigth
}x += dx * time;
y += dy * time;speed = 0;
sprite.setPosition(x, y);
}float getCoordinateX()//забираем координату Х
{
return x;
}
float getCoordinateY()// забираем координату Y
{
return x;
}
};
int main()
{
RenderWindow window(VideoMode(1280, 720), “Yolly”);
camera.reset(FloatRect(0, 0, 600, 600)); // размер камеры при ее созданииImage image_map;
image_map.loadFromFile(“images/map.png”);
Texture texture_map;
texture_map.loadFromImage(image_map);
Sprite sprite_map;
sprite_map.setTexture(texture_map);Clock clock; // создаем обьект время
Player Hero(“hero.png”, 100, 100, 83.0, 80.0);
while (window.isOpen())
{float time = clock.getElapsedTime().asMicroseconds(); //дать прошедшее время в микросекундах
clock.restart(); //перезагружает время
time = time / 800; //скорость игрыEvent event;
while (window.pollEvent(event))
{
if (event.type == Event::Closed)
window.close();
}/////////////////////////////////////////////Управление персонажем/////////////////////////////////////////////
if (Keyboard::isKeyPressed(Keyboard::W)) {
Hero.dir = 0; Hero.speed = 0.5;
getPlayerCoordinateForView(Hero.getCoordinateX(), Hero.getCoordinateY());
}
if (Keyboard::isKeyPressed(Keyboard::S)) {
Hero.dir = 1; Hero.speed = 0.5;
getPlayerCoordinateForView(Hero.getCoordinateX(), Hero.getCoordinateY());
}
if (Keyboard::isKeyPressed(Keyboard::A)) {
Hero.dir = 2; Hero.speed = 0.5;
Hero.sprite.setTextureRect(IntRect(83, 0, -83, 80));
getPlayerCoordinateForView(Hero.getCoordinateX(), Hero.getCoordinateY());
}
if (Keyboard::isKeyPressed(Keyboard::D)) {
Hero.dir = 3; Hero.speed = 0.5;
Hero.sprite.setTextureRect(IntRect(0, 0, 83, 80));
getPlayerCoordinateForView(Hero.getCoordinateX(), Hero.getCoordinateY());
}Hero.Update(time);
window.setView(camera);window.clear();
///////////////////////////////////////////////Рисуем карту////////////////////////////////////////////////////////
for (int i = 0; i < H_map; i++)
for (int j = 0; j < W_map; j++) {
if (TileMap[i][j] == ‘ ‘) sprite_map.setTextureRect(IntRect(0, 0, 30, 30));
if (TileMap[i][j] == ‘U’) sprite_map.setTextureRect(IntRect(30, 0, 31, 31));
if (TileMap[i][j] == ‘L’) sprite_map.setTextureRect(IntRect(60, 0, 31, 31));
if (TileMap[i][j] == ‘D’) sprite_map.setTextureRect(IntRect(90, 0, 30, 30));
if (TileMap[i][j] == ‘R’) sprite_map.setTextureRect(IntRect(120, 0, 30, 30));
if (TileMap[i][j] == ‘X’) sprite_map.setTextureRect(IntRect(128, 0, 320, 30));sprite_map.setPosition(j * 20, i * 20);
window.draw(sprite_map);
}
window.draw(Hero.sprite); // выводим спрайт на экран
window.display();
}return 0;
}view.h
#include <SFML/Graphics.hpp>
using namespace sf;
View camera;
View getPlayerCoordinateForView(float x, float y) {
camera.setCenter(x, y);
return camera;
}Попробуй просто скопировать код из урока, если поможет, тогда смотри внимательнее свой код, очень часто не правильно задается переменная или пропускается “;”
делал, не помогает
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.