SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › Не загружается текстура в спрайт
В этой теме 8 ответов, 3 участника, последнее обновление timrik 8 года/лет, 1 месяц назад.
-
АвторСообщения
-
Создаю игру типа бомбермена. Вместо того, чтобы при нажатии пробела выводить динамит, он выводит белый квадратик. Имя картинки сто раз проверил. Причем если я создаю объект класса динамита отдельно в мейне, то все нормально отображает. А когда я пытаюсь отобразить в качестве одного из элементов вектора, который является полем класса игрока, то нет. Извиняюсь за говнокод, моя первая игра на sfml. Прошу помочь!
-_-
Вложения:
You must be logged in to view attached files.Ну я ссылку на rghost оставил, не работает? Там кода много
в ргхост щас не полезу.
а как происходит рисование объекта вектора?
и вообще его update?C++123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284main.cpp#include <SFML/Graphics.hpp>#include <cmath>#include <iostream>#include <vector>//#include <iterator>#include <conio.h>#include "map.h"#include "dinamite.h"#include "enity.h"using namespace sf;using namespace std;class Player : public Enity{public:float dx, dy, speed;int dir;int bomb_count;int planted_bomb_count;vector<Dinamite> dinamite;Player(String F, float X, float Y, float W, float H) : Enity(F, X, Y, W, H){dir = 0;speed = 0;bomb_count = 1;planted_bomb_count = 0;sprite.setTextureRect(IntRect(15, 16, w, h));dinamite.push_back(Dinamite("dinamite.png", 0, 0, 48, 48));}void update(float time){switch (dir){case 0: dx = speed; dy = 0; break;case 1: dx = -speed; dy = 0; break;case 2: dx = 0; dy = speed; break;case 3: dx = 0; dy = -speed; break;}x += dx*time;y += dy*time;speed = 0;sprite.setPosition(x, y);interactionWithMap();}void interactionWithMap(){for (int i = y / 48; i < (y + h) / 48; i++)for (int j = x / 48; j<(x + w) / 48; j++){if (TileMap[i][j] == '0'){if (dy>0)y = i * 48 - h;if (dy<0)y = i * 48 + 48;if (dx>0)x = j * 48 - w;if (dx < 0)x = j * 48 + 48;}if (TileMap[i][j] == 'v'){TileMap[i][j] = ' ';incBombCount();}}}void incBombCount(){bomb_count++;dinamite.push_back(Dinamite("dinamite.png", 0, 0, 48, 48));}};int main(){randomBlockGenerate();RenderWindow window(VideoMode(624, 624), "Explosion");Player p("robot_white.png", 49, 49, 38, 40);/*Texture dinamite_texture;dinamite_texture.loadFromFile("images/dinamite.png");Sprite dinamite_sprite;dinamite_sprite.setTexture(dinamite_texture);*/Image map_image;map_image.loadFromFile("images/map1.png");Texture map_texture;map_texture.loadFromImage(map_image);Sprite map_sprite;map_sprite.setTexture(map_texture);double x, y = 0;float CurrentFrame = 0;Clock clock;while (window.isOpen()){float time = clock.getElapsedTime().asMicroseconds();clock.restart();time = time / 800;if (p.planted_bomb_count != 0)for (int i = 0; i < p.bomb_count; i++){if (p.dinamite[i].planted)p.dinamite[i].work_time = p.dinamite[i].clock.getElapsedTime().asMilliseconds();}Event event;while (window.pollEvent(event)){if (event.type == Event::Closed)window.close();if (event.type == Event::KeyReleased)if ((event.key.code == Keyboard::Space) && (p.planted_bomb_count != p.bomb_count)){for (int i = 0; i < p.bomb_count; i++){if (p.dinamite[i].work_time == 0){x = int(round(p.x / 48)) * 48;y = int(round(p.y / 48)) * 48;p.dinamite[i].sprite.setPosition(x, y);p.dinamite[i].clock.restart();p.dinamite[i].planted = true;p.planted_bomb_count++;break;}}}}for (int i = 0; i < HEIGHT_MAP; i++)for (int j = 0; j < WIDTH_MAP; j++){if (TileMap[i][j] == ' ') map_sprite.setTextureRect(IntRect(0, 0, 48, 48));if (TileMap[i][j] == '0') map_sprite.setTextureRect(IntRect(48, 0, 48, 48));if (TileMap[i][j] == 's') map_sprite.setTextureRect(IntRect(96, 0, 48, 48));if (TileMap[i][j] == 'v') map_sprite.setTextureRect(IntRect(144, 0, 48, 48));map_sprite.setPosition(j * 48, i * 48);window.draw(map_sprite);}if (Keyboard::isKeyPressed(Keyboard::Left)){p.dir = 1; p.speed = 0.1;CurrentFrame += 0.005*time;if (CurrentFrame > 4) CurrentFrame -= 4;p.sprite.setTextureRect(IntRect(15 + 59 * int(CurrentFrame), 74, 38, 40));}if (Keyboard::isKeyPressed(Keyboard::Right)){p.dir = 0; p.speed = 0.1;CurrentFrame += 0.005*time;if (CurrentFrame > 4) CurrentFrame -= 4;p.sprite.setTextureRect(IntRect(15 + 59 * int(CurrentFrame), 133, 38, 40));}if (Keyboard::isKeyPressed(Keyboard::Up)){p.dir = 3; p.speed = 0.1;CurrentFrame += 0.005*time;if (CurrentFrame > 4) CurrentFrame -= 4;p.sprite.setTextureRect(IntRect(15 + 59 * int(CurrentFrame), 192, 38, 40));}if (Keyboard::isKeyPressed(Keyboard::Down)){p.dir = 2; p.speed = 0.1;CurrentFrame += 0.005*time;if (CurrentFrame > 4) CurrentFrame -= 4;p.sprite.setTextureRect(IntRect(15 + 59 * int(CurrentFrame), 15, 38, 40));}for (int i = 0; i < p.bomb_count; i++){if (p.dinamite[i].planted){if (p.dinamite[i].work_time < 3000){window.draw(p.dinamite[i].sprite);}else{p.dinamite[i].planted = false;p.dinamite[i].work_time = 0;p.dinamite[i].clock.restart();p.planted_bomb_count--;}}}p.update(time);window.draw(p.sprite);window.display();}return 0;}dinamite.h#ifndef DINAMITE_H#define DINAMITE_H#include <SFML/Graphics.hpp>#include "enity.h"class Dinamite : public Enity{public:Clock clock;int work_time;bool planted;Dinamite(String F, float X, float Y, float W, float H) : Enity(F, X, Y, W, H){sprite.setTextureRect(IntRect(0, 0, w, h));work_time = 0;planted = false;}};#endif DINAMITE_Henity.h#ifndef ENITY_H#define ENITY_H#include <SFML/Graphics.hpp>using namespace sf;class Enity{public:float x, y, w, h;Image image;Texture texture;Sprite sprite;String file;Enity(String F, float X, float Y, float W, float H){file = F;x = X; y = Y;w = W; h = H;image.loadFromFile("images/" + file);texture.loadFromImage(image);sprite.setTexture(texture);}};#endif ENITY_HЕщё есть map.h, но, думаю, он не нуженСтоить заметить, с Игроком всё нормально, его спрайт он выводит без проблем, хотя класс Игрока также наследует функцию/конструктор, в которой происходит загрузка изображения в текстуру.
не очень вижу где ты рисуешь эти бомбы..
207 строчка
Кароч, мне проблему объяснили. Прочитал я про эти конструкторы копирования и не оч понял)). Думал, у меня и так все нормально инициализируется. В общем, не могли бы вы мне показать как именно мне исправить ошибку плиз?
Вложения:
You must be logged in to view attached files. -
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.