SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › создание копии объекта при нажатии на его спрайт и ее передвижение › Ответ в теме: создание копии объекта при нажатии на его спрайт и ее передвижение
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
#include <SFML/Graphics.hpp> #include "view.h" #include <iostream> #include <sstream> #include "iostream" #include "level.h" #include <vector> #include <list> #include "TinyXML/tinyxml.h" #include "Entity.h" #include "Enemy.h" #include "Tower.h" using namespace sf; int main() { RenderWindow window(VideoMode(1280, 700), "Lesson 22. kychka-pc.ru"); int count; float timer = 0; count = 0; Level lvl;//создали экземпляр класса уровень lvl.LoadFromFile("map.tmx");//загрузили в него карту, внутри класса с помощью методов он ее обработает. Image easyEnemyImage; easyEnemyImage.loadFromFile("B1.png"); Image TowerImage; TowerImage.loadFromFile("B2.png"); list<Entity*>entites; list<Entity*>::iterator it; Object e = lvl.GetObject("easyEnemy"); list<Tower*>towers; list<Tower*>::iterator wit; Object TowerObject = lvl.GetObject("tower1"); //Object TowerObject = lvl.GetObject("tower1"); //Tower Tower1(TowerImage, "tower1", lvl, TowerObject.rect.left, TowerObject.rect.top, 32, 32); bool isMowe = false; float dX = 0; float dY = 0; Clock clock; while (window.isOpen()) { float time = clock.getElapsedTime().asMicroseconds(); clock.restart(); time = time / 1000; timer += time; if (timer >= 1000 && count < 10){ entites.push_back(new Enemy(easyEnemyImage, "EasyEnemy", lvl, e.rect.left, e.rect.top, 32, 32)); count++; timer -= 1000; } Vector2i pixelPos = Mouse::getPosition(window); Vector2f pos = window.mapPixelToCoords(pixelPos); Texture pus; pus.loadFromFile("pust.png"); Sprite pust; pust.setTexture(pus); pust.setTextureRect(IntRect(0, 0, 32, 32)); Event event; while (window.pollEvent(event)) { if (event.type==Event::MouseButtonPressed) if (event.key.code==Mouse::Left) if (TowerObject.sprite.getGlobalBounds().contains(pos.x, pos.y)) { dX = pos.x - TowerObject.sprite.getPosition().x + 16; dY = pos.y - TowerObject.sprite.getPosition().y + 16; isMowe = true; } if (event.type == Event::MouseButtonReleased)//если отпустили клавишу if (event.key.code == Mouse::Left) //а именно левую isMowe = false; //то не можем двигать спрайт TowerObject.sprite.setColor(Color::White);//и даем ему прежний цвет towers.push_back(new Tower(TowerImage, "tower1", lvl, TowerObject.rect.left, TowerObject.rect.top, 32, 32)); } if (isMowe){ TowerObject.sprite.setColor(Color::Green); TowerObject.x = pos.x - dX;//тут матерится на x TowerObject.y = pos.y - dY;//тут на y window.draw(pust); } for (it = entites.begin(); it != entites.end();it++) { (*it)->update(time); } for (wit = towers.begin(); wit != towers.end(); wit++) { (*wit)->update(time); } //Tower1.update(time); window.clear(Color(77, 83, 140)); lvl.Draw(window);//рисуем новую карту for (it = entites.begin(); it != entites.end(); it++){ window.draw((*it)->sprite); } for (wit = towers.begin(); wit != towers.end(); wit++){ window.draw((*wit)->sprite); } // window.draw(Tower1.sprite); window.display(); } return 0; } |