SFML и C++ Уроки \ Разработка игр › Форумы › SFML System, Window и другие вопросы › Не получается скроллить карту мышью
Помечено: нерабочий скроллинг :(
В этой теме 10 ответов, 3 участника, последнее обновление Павел Букреев 8 года/лет, 11 мес. назад.
-
АвторСообщения
-
Код
C++123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596#ifndef GRAPHICS_H#define GRAPHICS_Husing namespace std;using namespace sf;#include "SFML/Graphics.hpp"class Graphics{public:sf::RenderWindow* window;sf::CircleShape shape;float scale;Graphics(int w, int h, float scale, string name){window = new RenderWindow(VideoMode(w, h), name, Style::Fullscreen);this->scale = scale;}Vector2i localPosition = Mouse::getPosition(window); // подчеркиваетif (localPosition.x < 3) { view.move(-0.2*time, 0); }//влевоif (localPosition.x > window.getSize().x - 3) { view.move(0.2*time, 0); }//вправоif (localPosition.y > window.getSize().y - 3) { view.move(0, 0.2*time); }//внизif (localPosition.y < 3) { view.move(0, -0.2*time); }//вверхvoid Begin(float dt){Vector2f speed(0, 0);Event event;while (window->pollEvent(event)){if (event.type == Event::Closed)window->close();if(event.type == sf::Event::KeyPressed){if(event.key.code == sf::Keyboard::Escape){window->close();}/* if(event.key.code==sf::Keyboard::Left) speed.x = -100; //рабочий фулскринif(event.key.code==sf::Keyboard::Up) speed.y = -100;if(event.key.code==sf::Keyboard::Down) speed.y = 100;if(event.key.code==sf::Keyboard::Right)speed.x = 100;*/}/* if (event.type == sf::Event::MouseButtonPressed){if (event.mouseButton.button == sf::Mouse::Right){std::cout << "the right button was pressed" << std::endl;std::cout << "mouse x: " << event.mouseButton.x << std::endl;std::cout << "mouse y: " << event.mouseButton.y << std::endl;}} */if (event.type == sf::Event::MouseMoved) // делать высвечивание клетки!!{if ((event.mouseMove.x==0)&&(event.mouseMove.y==0)) window->close();}}sf::Vector2u size = window->getSize();position+=speed*dt;window->setView(sf::View(position, sf::Vector2f(1.f*size.x/scale, 1.f*size.y/scale)));window->clear(sf::Color::White);}void End(){window->display();}bool IsRunning(){return window->isOpen();}void DrawScene(Scene* scene){for(int i = 0; i < scene->cells.size(); i++){DrawCell(scene->cells[i]);}}sf::Vector2f position;private:void DrawCell(Cell* cell){shape.setFillColor(cell->color);shape.setRadius(cell->radius);shape.setOrigin(shape.getRadius(), shape.getRadius());shape.setPosition(cell->position);window->draw(shape);}};Вложения:
You must be logged in to view attached files..
Вложения:
You must be logged in to view attached files.Выложи весь проект. Проверка типа
C++1if (localPosition.x < 3) { view.move(-0.2*time, 0); }//влеводолжна быть в бесконечном цикле “пока открыто окно”
хедрс
Вложения:
You must be logged in to view attached files.main+headr
Вложения:
You must be logged in to view attached files.main
#include <iostream>
#include <string>
#include <stdio.h>
#include <fstream>
using namespace sf;
using namespace std;#include “Cell.h”
#include “Scene.h”
#include “Graphics.h”
#include “GameLogi#include “SFML/Graphics.hpp”c.h”int main()
{Graphics graph(500, 300, 1, “Cells”);
Scene scene;
//scene.LoadFromFile(“fromri”);
//scene.AddCell(sf::Vector2f(-100,80),40,sf::Color::Cyan);
scene.AddCell(sf::Vector2f(1,1), “Code”, 100, 34, 12, true, false, 10.2, sf::Color::Magenta);
scene.SaveInFile(“inri”);
GameLogic logic;
sf::Clock clock;
while(graph.IsRunning())
{
float dt = clock.getElapsedTime().asSeconds();
clock.restart();
graph.Begin(dt);
logic.UpdateScene(&scene, dt);
graph.DrawScene(&scene);
graph.End();
}
return 0;
}if (localPosition.x < 3) { view.move(-0.2*time, 0); }//влево
if (localPosition.x > window.getSize().x – 3) { view.move(0.2*time, 0); }//вправо
if (localPosition.y > window.getSize().y – 3) { view.move(0, 0.2*time); }//вниз
if (localPosition.y < 3) { view.move(0, -0.2*time); }//ввех
Если это у вас класс то наверно нужно этот код описать в методе класса, что то типо update();
А так просто не видно к чему он относиться.Если честно то у вас странный класс получился
Vector2i localPosition = Mouse::getPosition(window); // подчеркивает
Скорей всего не Mouse инициализирован.
Elizabeth , скинь весь проект в архиве на какое нибудь облако или мне в контакте. Тут каша получилась. Я попробую твой проект открыть и посмотреть что не работает. Структуру кода я не особо разберу, обычно в main() происходит обновление и условия скроллинга карты.
Подскажите пожалуйста, как вас найти вк?
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.