Созданные ответы форума
Просмотр 2 сообщений - с 1 по 2 (из 2 всего)
-
АвторСообщения
-
Насколько я понял передавать картинку не получится, а нужно именно спрайт?
C++12Image heroImage;heroImage.loadFromFile("files/hero.png");C++1234Texture heroImage;heroImage.loadFromFile("files/hero.png");AnimationManager anim;anim.loadFromXML("files/hero_anim.xml",heroImage);И наверно прийдется делать как во втором варианте и не много изменять класс Player под работу с текстурой, а не изображением.
Поправьте меня, если я не прав.
Что бы не создавать новую тему, напишу здесь.
По одному из сторонних уроков создал класс анимации, который загружает всю анимацию персонажа из XML-файла.
C++123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143#ifndef ANIM_H#define ANIM_H#include "TinyXML/tinyxml.h"#include <SFML/Graphics.hpp>using namespace sf;class Animation{public:std::vector<IntRect> frames, frames_flip;float currentFrame, speed;bool loop, flip, isPlaying;Sprite sprite;Animation(){currentFrame = 0;isPlaying=true;flip=false;}void tick(float time){if (!isPlaying) return;currentFrame += speed * time;if (currentFrame > frames.size()) { currentFrame -= frames.size();if (!loop) {isPlaying=false; return;}}int i = currentFrame;sprite.setTextureRect( frames[i] );if (flip) sprite.setTextureRect( frames_flip[i] );}};class AnimationManager{public:String currentAnim;std::map<String, Animation> animList;AnimationManager(){}~AnimationManager(){ animList.clear();}void create(String name, Texture &texture, int x, int y, int w, int h, int count, float speed, int step=0, bool Loop=true){Animation a;a.speed = speed;a.loop = Loop;a.sprite.setTexture(texture);a.sprite.setOrigin(0,h);for (int i=0;i<count;i++){a.frames.push_back( IntRect(x+i*step, y, w, h) );a.frames_flip.push_back( IntRect(x+i*step+w, y, -w, h) );}animList[name] = a;currentAnim = name;}//загрузка из файла XMLvoid loadFromXML(std::string fileName,Texture &t){TiXmlDocument animFile(fileName.c_str());animFile.LoadFile();TiXmlElement *head;head = animFile.FirstChildElement("sprites");TiXmlElement *animElement;animElement = head->FirstChildElement("animation");while(animElement){Animation anim;currentAnim = animElement->Attribute("title");int delay = atoi(animElement->Attribute("delay"));anim.speed = 1.0/delay; anim.sprite.setTexture(t);TiXmlElement *cut;cut = animElement->FirstChildElement("cut");while (cut){int x = atoi(cut->Attribute("x"));int y = atoi(cut->Attribute("y"));int w = atoi(cut->Attribute("w"));int h = atoi(cut->Attribute("h"));anim.frames.push_back( IntRect(x,y,w,h) );anim.frames_flip.push_back( IntRect(x+w,y,-w,h) );cut = cut->NextSiblingElement("cut");}anim.sprite.setOrigin(0,anim.frames[0].height);animList[currentAnim] = anim;animElement = animElement->NextSiblingElement("animation");}}void set(String name){currentAnim = name;animList[currentAnim].flip=0;}void draw(RenderWindow &window,int x=0, int y=0){animList[currentAnim].sprite.setPosition(x,y);window.draw( animList[currentAnim].sprite );}void flip(bool b=1) {animList[currentAnim].flip = b;}void tick(float time) {animList[currentAnim].tick(time);}void pause() {animList[currentAnim].isPlaying=false;}void play() {animList[currentAnim].isPlaying=true;}void play(String name) {animList[name].isPlaying=true;}bool isPlaying() {return animList[currentAnim].isPlaying;}float getH() {return animList[currentAnim].frames[0].height;}float getW() {return animList[currentAnim].frames[0].width;}};#endif ANIM_HВ классе int main() прописал функцию вызова
C++12AnimationManager anim;anim.loadFromXML("files/hero_anim.xml",_);но не как не могу понять что нужно прописать во втором аргументе(где знак подчеркивания). Пробовал напрямую обратится к Player p…., но выдает ошибки. Каким образом можно реализовать эту функцию что бы работало все корректно?
ЗЫ: код практически такой, как в 20м уроке. -
АвторСообщения
Просмотр 2 сообщений - с 1 по 2 (из 2 всего)