Welcome, Guest. Please login or register. Did you miss your activation email?

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - spoty76

Pages: [1] 2
1
General / Animation
« on: July 16, 2018, 05:40:50 pm »
Hello,

I always get upset when I see the anount of memory my animation method takes. Basically, what I do is scroll pictures quickly and I use about 30 picctures for animation, because I want good animation. Each picture is high quality, so it takes a lot of memory. This is a common way to do it. I want to know if there is a way to do it like on unity, where you have a program with which you create an animation and it inserts it in the game, it just uses body parts. The point is that I don't use a ton of pictures. I think that my request doesn't exist  :-\, but I still should ask. It's just too late to switch to unity, the code already has 10000 lines :-(

Thanks

2
General / Re: Pause
« on: December 27, 2017, 10:30:51 pm »
Oh yeah, it worked, the problem was that when I was pausing time = clock... it became undefined and when game was unpaused it affected the states.

3
General / Re: Pause
« on: December 27, 2017, 06:21:51 pm »
I tried to do like this, but I end up with the same problem. The player falls through the map, it dies and when everything is paused, the game starts to glitch. I checked, everything which is in thr "loop" sections is under pause conditions and when pause is on, it doesn't work.

4
General / Pause
« on: December 27, 2017, 01:00:46 am »
Hello, I'm not really good at coding, so please explain more understandable.
I wanted to create something like a pause for a game and came up with this idea:
int main()
{
//RenderWindow
bool pause = false;
game:
while ((window.isOpen()) && (!pause))
        {
                float time = time = clock.getElapsedTime().asMicroseconds();
                clock.restart();
                time = time / gameSpeed;
                sf::Event event;
                while ((window.pollEvent(event)) && (!pause))
                {
                        if (event.type == sf::Event::Closed)
                        {
                                window.close();
                                return 1;
                        }

                       if ((event.type == Event::KeyPressed) && (event.key.code == Keyboard::Esc))
                        {
                                pause = true;
                        }
                 }...
                //game body//
        }
while ((window.isOpen()) && (pause))
        {
                sf::Event event;
                while ((window.pollEvent(event)) && (pause))
                {
                        if (event.type == sf::Event::Closed)
                        {
                                window.close();
                                return 1;
                        }

                        if ((event.type == Event::KeyPressed) && (event.key.code == Keyboard::Esc))
                        {
                                pause = false;
                                goto game;
                        }
                }

                window.display();
        }
}
 

The problem is that it doesn't work very well. The game becomes a bit lagging, I mean the animations start to flicker and finally, when I go back to game:, the player falls through the map, nevertheless every loop is in the first while.
What should I do?

5
General / Re: Body parts
« on: September 18, 2017, 01:00:52 pm »
I mean how can I connect those parts to each other, some say by vector, but I don't know how to do it

6
General / Body parts
« on: September 17, 2017, 07:08:03 pm »
Hello, I've got a character with separate body parts (legs, arms...), how can I realize them in game making a normal character with smooth movement?

7
General / Re: Levels
« on: September 17, 2017, 07:06:19 pm »
SOLVED

8
General / Levels
« on: September 16, 2017, 02:50:57 pm »
Hello, I'm using tiled map editor and tinyxml, the main level is loaded in firstly in int main as lvl.LoadFromFile("mainmap.tmx");
I want somehow to load another map (like another level), when I touch the object for instance, but if I do like that:\ in class player
if (obj[i].name == "poison")
                                {
                                        if (a == false)
                                        {
                                                a = true;
                                        }
                                }
And after window poll event:
if (p.a == true)
                {
                        lvl.LoadFromFile("mainmap2.tmx");
                        p.a = false;
                }
The second map loads, but the first one doesn't disappear,
I need somehow to realize something that can delete the first map, or load even new main.cpp file or whatever, but I need to make levels.

I'm using a specific level code for tiled map editor:
#ifndef LEVEL_H
#define LEVEL_H

#include <string>
#include <vector>
#include <map>
#include <SFML/Graphics.hpp>
#include <iostream>
#include "tinyxml\tinyxml.h"

struct Object
{
        int GetPropertyInt(std::string name);//&#1085;&#1086;&#1084;&#1077;&#1088; &#1089;&#1074;&#1086;&#1081;&#1089;&#1090;&#1074;&#1072; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1072; &#1074; &#1085;&#1072;&#1096;&#1077;&#1084; &#1089;&#1087;&#1080;&#1089;&#1082;&#1077;
        float GetPropertyFloat(std::string name);
        std::string GetPropertyString(std::string name);

        std::string name;//&#1086;&#1073;&#1098;&#1103;&#1074;&#1080;&#1083;&#1080; &#1087;&#1077;&#1088;&#1077;&#1084;&#1077;&#1085;&#1085;&#1091;&#1102; name &#1090;&#1080;&#1087;&#1072; string
        std::string type;//&#1072; &#1079;&#1076;&#1077;&#1089;&#1100; &#1087;&#1077;&#1088;&#1077;&#1084;&#1077;&#1085;&#1085;&#1091;&#1102; type &#1090;&#1080;&#1087;&#1072; string
        sf::Rect<float> rect;//&#1090;&#1080;&#1087; Rect &#1089; &#1085;&#1077;&#1094;&#1077;&#1083;&#1099;&#1084;&#1080; &#1079;&#1085;&#1072;&#1095;&#1077;&#1085;&#1080;&#1103;&#1084;&#1080;
        std::map<std::string, std::string> properties;//&#1089;&#1086;&#1079;&#1076;&#1072;&#1105;&#1084; &#1072;&#1089;&#1089;&#1086;&#1094;&#1080;&#1072;&#1090;&#1080;&#1085;&#1099;&#1081; &#1084;&#1072;&#1089;&#1089;&#1080;&#1074;. &#1082;&#1083;&#1102;&#1095; - &#1089;&#1090;&#1088;&#1086;&#1082;&#1086;&#1074;&#1099;&#1081; &#1090;&#1080;&#1087;, &#1079;&#1085;&#1072;&#1095;&#1077;&#1085;&#1080;&#1077; - &#1089;&#1090;&#1088;&#1086;&#1082;&#1086;&#1074;&#1099;&#1081;

        sf::Sprite sprite;//&#1086;&#1073;&#1098;&#1103;&#1074;&#1080;&#1083;&#1080; &#1089;&#1087;&#1088;&#1072;&#1081;&#1090;
};

struct Layer//&#1089;&#1083;&#1086;&#1080;
{
        int opacity;//&#1085;&#1077;&#1087;&#1088;&#1086;&#1079;&#1088;&#1072;&#1095;&#1085;&#1086;&#1089;&#1090;&#1100; &#1089;&#1083;&#1086;&#1103;
        std::vector<sf::Sprite> tiles;//&#1079;&#1072;&#1082;&#1080;&#1076;&#1099;&#1074;&#1072;&#1077;&#1084; &#1074; &#1074;&#1077;&#1082;&#1090;&#1086;&#1088; &#1090;&#1072;&#1081;&#1083;&#1099;
};

class Level//&#1075;&#1083;&#1072;&#1074;&#1085;&#1099;&#1081; &#1082;&#1083;&#1072;&#1089;&#1089; - &#1091;&#1088;&#1086;&#1074;&#1077;&#1085;&#1100;
{
public:
        bool LoadFromFile(std::string filename);//&#1074;&#1086;&#1079;&#1074;&#1088;&#1072;&#1097;&#1072;&#1077;&#1090; false &#1077;&#1089;&#1083;&#1080; &#1085;&#1077; &#1087;&#1086;&#1083;&#1091;&#1095;&#1080;&#1083;&#1086;&#1089;&#1100; &#1079;&#1072;&#1075;&#1088;&#1091;&#1079;&#1080;&#1090;&#1100;
        Object GetObject(std::string name);
        std::vector<Object> GetObjects(std::string name);//&#1074;&#1099;&#1076;&#1072;&#1077;&#1084; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090; &#1074; &#1085;&#1072;&#1096; &#1091;&#1088;&#1086;&#1074;&#1077;&#1085;&#1100;
        std::vector<Object> GetAllObjects();//&#1074;&#1099;&#1076;&#1072;&#1077;&#1084; &#1074;&#1089;&#1077; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1099; &#1074; &#1085;&#1072;&#1096; &#1091;&#1088;&#1086;&#1074;&#1077;&#1085;&#1100;
        void Draw(sf::RenderWindow &window);//&#1088;&#1080;&#1089;&#1091;&#1077;&#1084; &#1074; &#1086;&#1082;&#1085;&#1086;
        sf::Vector2i GetTileSize();//&#1087;&#1086;&#1083;&#1091;&#1095;&#1072;&#1077;&#1084; &#1088;&#1072;&#1079;&#1084;&#1077;&#1088; &#1090;&#1072;&#1081;&#1083;&#1072;

private:
        int width, height, tileWidth, tileHeight;//&#1074; tmx &#1092;&#1072;&#1081;&#1083;&#1077; width height &#1074; &#1085;&#1072;&#1095;&#1072;&#1083;&#1077;,&#1079;&#1072;&#1090;&#1077;&#1084; &#1088;&#1072;&#1079;&#1084;&#1077;&#1088; &#1090;&#1072;&#1081;&#1083;&#1072;
        int firstTileID;//&#1087;&#1086;&#1083;&#1091;&#1095;&#1072;&#1077;&#1084; &#1072;&#1081;&#1076;&#1080; &#1087;&#1077;&#1088;&#1074;&#1086;&#1075;&#1086; &#1090;&#1072;&#1081;&#1083;&#1072;
        sf::Rect<float> drawingBounds;//&#1088;&#1072;&#1079;&#1084;&#1077;&#1088; &#1095;&#1072;&#1089;&#1090;&#1080; &#1082;&#1072;&#1088;&#1090;&#1099; &#1082;&#1086;&#1090;&#1086;&#1088;&#1091;&#1102; &#1088;&#1080;&#1089;&#1091;&#1077;&#1084;
        sf::Texture tilesetImage;//&#1090;&#1077;&#1082;&#1089;&#1090;&#1091;&#1088;&#1072; &#1082;&#1072;&#1088;&#1090;&#1099;
        std::vector<Object> objects;//&#1084;&#1072;&#1089;&#1089;&#1080;&#1074; &#1090;&#1080;&#1087;&#1072; &#1054;&#1073;&#1098;&#1077;&#1082;&#1090;&#1099;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1081; &#1084;&#1099; &#1089;&#1086;&#1079;&#1076;&#1072;&#1083;&#1080;
        std::vector<Layer> layers;
};

///////////////////////////////////////


int Object::GetPropertyInt(std::string name)//&#1074;&#1086;&#1079;&#1074;&#1088;&#1072;&#1097;&#1072;&#1077;&#1084; &#1085;&#1086;&#1084;&#1077;&#1088; &#1089;&#1074;&#1086;&#1081;&#1089;&#1090;&#1074;&#1072; &#1074; &#1085;&#1072;&#1096;&#1077;&#1084; &#1089;&#1087;&#1080;&#1089;&#1082;&#1077;
{
        return atoi(properties[name].c_str());
}

float Object::GetPropertyFloat(std::string name)
{
        return strtod(properties[name].c_str(), NULL);
}

std::string Object::GetPropertyString(std::string name)//&#1087;&#1086;&#1083;&#1091;&#1095;&#1080;&#1090;&#1100; &#1080;&#1084;&#1103; &#1074; &#1074;&#1080;&#1076;&#1077; &#1089;&#1090;&#1088;&#1086;&#1082;&#1080;.&#1074;&#1088;&#1086;&#1076;&#1077; &#1087;&#1086;&#1085;&#1103;&#1090;&#1085;&#1086;
{
        return properties[name];
}

bool Level::LoadFromFile(std::string filename)//&#1076;&#1074;&#1086;&#1077;&#1090;&#1086;&#1095;&#1080;&#1103;-&#1086;&#1073;&#1088;&#1072;&#1097;&#1077;&#1085;&#1080;&#1077; &#1082; &#1084;&#1077;&#1090;&#1086;&#1076;&#1072;&#1084; &#1082;&#1083;&#1072;&#1089;&#1089;&#1072; &#1074;&#1085;&#1077; &#1082;&#1083;&#1072;&#1089;&#1089;&#1072;
{
        TiXmlDocument levelFile(filename.c_str());//&#1079;&#1072;&#1075;&#1088;&#1091;&#1078;&#1072;&#1077;&#1084; &#1092;&#1072;&#1081;&#1083; &#1074; TiXmlDocument

                                                                                          // &#1079;&#1072;&#1075;&#1088;&#1091;&#1078;&#1072;&#1077;&#1084; XML-&#1082;&#1072;&#1088;&#1090;&#1091;
        if (!levelFile.LoadFile())//&#1077;&#1089;&#1083;&#1080; &#1085;&#1077; &#1091;&#1076;&#1072;&#1083;&#1086;&#1089;&#1100; &#1079;&#1072;&#1075;&#1088;&#1091;&#1079;&#1080;&#1090;&#1100; &#1082;&#1072;&#1088;&#1090;&#1091;
        {
                std::cout << "Loading level \"" << filename << "\" failed." << std::endl;//&#1074;&#1099;&#1076;&#1072;&#1077;&#1084; &#1086;&#1096;&#1080;&#1073;&#1082;&#1091;
                return false;
        }

        // &#1088;&#1072;&#1073;&#1086;&#1090;&#1072;&#1077;&#1084; &#1089; &#1082;&#1086;&#1085;&#1090;&#1077;&#1081;&#1085;&#1077;&#1088;&#1086;&#1084; map
        TiXmlElement *map;
        map = levelFile.FirstChildElement("map");

        // &#1087;&#1088;&#1080;&#1084;&#1077;&#1088; &#1082;&#1072;&#1088;&#1090;&#1099;: <map version="1.0" orientation="orthogonal"
        // width="10" height="10" tilewidth="34" tileheight="34">
        width = atoi(map->Attribute("width"));//&#1080;&#1079;&#1074;&#1083;&#1077;&#1082;&#1072;&#1077;&#1084; &#1080;&#1079; &#1085;&#1072;&#1096;&#1077;&#1081; &#1082;&#1072;&#1088;&#1090;&#1099; &#1077;&#1077; &#1089;&#1074;&#1086;&#1081;&#1089;&#1090;&#1074;&#1072;
        height = atoi(map->Attribute("height"));//&#1090;&#1077; &#1089;&#1074;&#1086;&#1081;&#1089;&#1090;&#1074;&#1072;, &#1082;&#1086;&#1090;&#1086;&#1088;&#1099;&#1077; &#1079;&#1072;&#1076;&#1072;&#1074;&#1072;&#1083;&#1080; &#1087;&#1088;&#1080; &#1088;&#1072;&#1073;&#1086;&#1090;&#1077; &#1074;
        tileWidth = atoi(map->Attribute("tilewidth"));//&#1090;&#1072;&#1081;&#1083;&#1084;&#1072;&#1087; &#1088;&#1077;&#1076;&#1072;&#1082;&#1090;&#1086;&#1088;&#1077;
        tileHeight = atoi(map->Attribute("tileheight"));

        // &#1041;&#1077;&#1088;&#1077;&#1084; &#1086;&#1087;&#1080;&#1089;&#1072;&#1085;&#1080;&#1077; &#1090;&#1072;&#1081;&#1083;&#1089;&#1077;&#1090;&#1072; &#1080; &#1080;&#1076;&#1077;&#1085;&#1090;&#1080;&#1092;&#1080;&#1082;&#1072;&#1090;&#1086;&#1088; &#1087;&#1077;&#1088;&#1074;&#1086;&#1075;&#1086; &#1090;&#1072;&#1081;&#1083;&#1072;
        TiXmlElement *tilesetElement;
        tilesetElement = map->FirstChildElement("tileset");
        firstTileID = atoi(tilesetElement->Attribute("firstgid"));

        // source - &#1087;&#1091;&#1090;&#1100; &#1076;&#1086; &#1082;&#1072;&#1088;&#1090;&#1080;&#1085;&#1082;&#1080; &#1074; &#1082;&#1086;&#1085;&#1090;&#1077;&#1081;&#1085;&#1077;&#1088;&#1077; image
        TiXmlElement *image;
        image = tilesetElement->FirstChildElement("image");
        std::string imagepath = image->Attribute("source");

        // &#1087;&#1099;&#1090;&#1072;&#1077;&#1084;&#1089;&#1103; &#1079;&#1072;&#1075;&#1088;&#1091;&#1079;&#1080;&#1090;&#1100; &#1090;&#1072;&#1081;&#1083;&#1089;&#1077;&#1090;
        sf::Image img;

        if (!img.loadFromFile(imagepath))
        {
                std::cout << "Failed to load tile sheet." << std::endl;//&#1077;&#1089;&#1083;&#1080; &#1085;&#1077; &#1091;&#1076;&#1072;&#1083;&#1086;&#1089;&#1100; &#1079;&#1072;&#1075;&#1088;&#1091;&#1079;&#1080;&#1090;&#1100; &#1090;&#1072;&#1081;&#1083;&#1089;&#1077;&#1090;-&#1074;&#1099;&#1074;&#1086;&#1076;&#1080;&#1084; &#1086;&#1096;&#1080;&#1073;&#1082;&#1091; &#1074; &#1082;&#1086;&#1085;&#1089;&#1086;&#1083;&#1100;
                return false;
        }


        img.createMaskFromColor(sf::Color(255, 255, 255));//&#1076;&#1083;&#1103; &#1084;&#1072;&#1089;&#1082;&#1080; &#1094;&#1074;&#1077;&#1090;&#1072;.&#1089;&#1077;&#1081;&#1095;&#1072;&#1089; &#1085;&#1077;&#1090; &#1084;&#1072;&#1089;&#1082;&#1080;
        tilesetImage.loadFromImage(img);
        tilesetImage.setSmooth(false);//&#1089;&#1075;&#1083;&#1072;&#1078;&#1080;&#1074;&#1072;&#1085;&#1080;&#1077;

                                                                  // &#1087;&#1086;&#1083;&#1091;&#1095;&#1072;&#1077;&#1084; &#1082;&#1086;&#1083;&#1080;&#1095;&#1077;&#1089;&#1090;&#1074;&#1086; &#1089;&#1090;&#1086;&#1083;&#1073;&#1094;&#1086;&#1074; &#1080; &#1089;&#1090;&#1088;&#1086;&#1082; &#1090;&#1072;&#1081;&#1083;&#1089;&#1077;&#1090;&#1072;
        int columns = tilesetImage.getSize().x / tileWidth;
        int rows = tilesetImage.getSize().y / tileHeight;

        // &#1074;&#1077;&#1082;&#1090;&#1086;&#1088; &#1080;&#1079; &#1087;&#1088;&#1103;&#1084;&#1086;&#1091;&#1075;&#1086;&#1083;&#1100;&#1085;&#1080;&#1082;&#1086;&#1074; &#1080;&#1079;&#1086;&#1073;&#1088;&#1072;&#1078;&#1077;&#1085;&#1080;&#1081; (TextureRect)
        std::vector<sf::Rect<int>> subRects;

        for (int y = 0; y < rows; y++)
                for (int x = 0; x < columns; x++)
                {
                        sf::Rect<int> rect;

                        rect.top = y * tileHeight;
                        rect.height = tileHeight;
                        rect.left = x * tileWidth;
                        rect.width = tileWidth;

                        subRects.push_back(rect);
                }

        // &#1088;&#1072;&#1073;&#1086;&#1090;&#1072; &#1089;&#1086; &#1089;&#1083;&#1086;&#1103;&#1084;&#1080;
        TiXmlElement *layerElement;
        layerElement = map->FirstChildElement("layer");
        while (layerElement)
        {
                Layer layer;

                // &#1077;&#1089;&#1083;&#1080; &#1087;&#1088;&#1080;&#1089;&#1091;&#1090;&#1089;&#1090;&#1074;&#1091;&#1077;&#1090; opacity, &#1090;&#1086; &#1079;&#1072;&#1076;&#1072;&#1077;&#1084; &#1087;&#1088;&#1086;&#1079;&#1088;&#1072;&#1095;&#1085;&#1086;&#1089;&#1090;&#1100; &#1089;&#1083;&#1086;&#1103;, &#1080;&#1085;&#1072;&#1095;&#1077; &#1086;&#1085; &#1087;&#1086;&#1083;&#1085;&#1086;&#1089;&#1090;&#1100;&#1102; &#1085;&#1077;&#1087;&#1088;&#1086;&#1079;&#1088;&#1072;&#1095;&#1077;&#1085;
                if (layerElement->Attribute("opacity") != NULL)
                {
                        float opacity = strtod(layerElement->Attribute("opacity"), NULL);
                        layer.opacity = 255 * opacity;
                }
                else
                {
                        layer.opacity = 255;
                }

                //  &#1082;&#1086;&#1085;&#1090;&#1077;&#1081;&#1085;&#1077;&#1088; <data>
                TiXmlElement *layerDataElement;
                layerDataElement = layerElement->FirstChildElement("data");

                if (layerDataElement == NULL)
                {
                        std::cout << "Bad map. No layer information found." << std::endl;
                }

                //  &#1082;&#1086;&#1085;&#1090;&#1077;&#1081;&#1085;&#1077;&#1088; <tile> - &#1086;&#1087;&#1080;&#1089;&#1072;&#1085;&#1080;&#1077; &#1090;&#1072;&#1081;&#1083;&#1086;&#1074; &#1082;&#1072;&#1078;&#1076;&#1086;&#1075;&#1086; &#1089;&#1083;&#1086;&#1103;
                TiXmlElement *tileElement;
                tileElement = layerDataElement->FirstChildElement("tile");

                if (tileElement == NULL)
                {
                        std::cout << "Bad map. No tile information found." << std::endl;
                        return false;
                }

                int x = 0;
                int y = 0;

                while (tileElement)
                {
                        int tileGID = atoi(tileElement->Attribute("gid"));
                        int subRectToUse = tileGID - firstTileID;

                        // &#1059;&#1089;&#1090;&#1072;&#1085;&#1072;&#1074;&#1083;&#1080;&#1074;&#1072;&#1077;&#1084; TextureRect &#1082;&#1072;&#1078;&#1076;&#1086;&#1075;&#1086; &#1090;&#1072;&#1081;&#1083;&#1072;
                        if (subRectToUse >= 0)
                        {
                                sf::Sprite sprite;
                                sprite.setTexture(tilesetImage);
                                sprite.setTextureRect(subRects[subRectToUse]);
                                sprite.setPosition(x * tileWidth, y * tileHeight);
                                sprite.setColor(sf::Color(255, 255, 255, layer.opacity));

                                layer.tiles.push_back(sprite);//&#1079;&#1072;&#1082;&#1080;&#1076;&#1099;&#1074;&#1072;&#1077;&#1084; &#1074; &#1089;&#1083;&#1086;&#1081; &#1089;&#1087;&#1088;&#1072;&#1081;&#1090;&#1099; &#1090;&#1072;&#1081;&#1083;&#1086;&#1074;
                        }

                        tileElement = tileElement->NextSiblingElement("tile");

                        x++;
                        if (x >= width)
                        {
                                x = 0;
                                y++;
                                if (y >= height)
                                        y = 0;
                        }
                }

                layers.push_back(layer);

                layerElement = layerElement->NextSiblingElement("layer");
        }

        // &#1088;&#1072;&#1073;&#1086;&#1090;&#1072; &#1089; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1072;&#1084;&#1080;
        TiXmlElement *objectGroupElement;

        // &#1077;&#1089;&#1083;&#1080; &#1077;&#1089;&#1090;&#1100; &#1089;&#1083;&#1086;&#1080; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1086;&#1074;
        if (map->FirstChildElement("objectgroup") != NULL)
        {
                objectGroupElement = map->FirstChildElement("objectgroup");
                while (objectGroupElement)
                {
                        //  &#1082;&#1086;&#1085;&#1090;&#1077;&#1081;&#1085;&#1077;&#1088; <object>
                        TiXmlElement *objectElement;
                        objectElement = objectGroupElement->FirstChildElement("object");

                        while (objectElement)
                        {
                                // &#1087;&#1086;&#1083;&#1091;&#1095;&#1072;&#1077;&#1084; &#1074;&#1089;&#1077; &#1076;&#1072;&#1085;&#1085;&#1099;&#1077; - &#1090;&#1080;&#1087;, &#1080;&#1084;&#1103;, &#1087;&#1086;&#1079;&#1080;&#1094;&#1080;&#1103;, &#1080; &#1090;&#1076;
                                std::string objectType;
                                if (objectElement->Attribute("type") != NULL)
                                {
                                        objectType = objectElement->Attribute("type");
                                }
                                std::string objectName;
                                if (objectElement->Attribute("name") != NULL)
                                {
                                        objectName = objectElement->Attribute("name");
                                }
                                int x = atoi(objectElement->Attribute("x"));
                                int y = atoi(objectElement->Attribute("y"));

                                int width, height;

                                sf::Sprite sprite;
                                sprite.setTexture(tilesetImage);
                                sprite.setTextureRect(sf::Rect<int>(0, 0, 0, 0));
                                sprite.setPosition(x, y);

                                if (objectElement->Attribute("width") != NULL)
                                {
                                        width = atoi(objectElement->Attribute("width"));
                                        height = atoi(objectElement->Attribute("height"));
                                }
                                else
                                {
                                        width = subRects[atoi(objectElement->Attribute("gid")) - firstTileID].width;
                                        height = subRects[atoi(objectElement->Attribute("gid")) - firstTileID].height;
                                        sprite.setTextureRect(subRects[atoi(objectElement->Attribute("gid")) - firstTileID]);
                                }

                                // &#1101;&#1082;&#1079;&#1077;&#1084;&#1087;&#1083;&#1103;&#1088; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1072;
                                Object object;
                                object.name = objectName;
                                object.type = objectType;
                                object.sprite = sprite;

                                sf::Rect <float> objectRect;
                                objectRect.top = y;
                                objectRect.left = x;
                                objectRect.height = height;
                                objectRect.width = width;
                                object.rect = objectRect;

                                // "&#1087;&#1077;&#1088;&#1077;&#1084;&#1077;&#1085;&#1085;&#1099;&#1077;" &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1072;
                                TiXmlElement *properties;
                                properties = objectElement->FirstChildElement("properties");
                                if (properties != NULL)
                                {
                                        TiXmlElement *prop;
                                        prop = properties->FirstChildElement("property");
                                        if (prop != NULL)
                                        {
                                                while (prop)
                                                {
                                                        std::string propertyName = prop->Attribute("name");
                                                        std::string propertyValue = prop->Attribute("value");

                                                        object.properties[propertyName] = propertyValue;

                                                        prop = prop->NextSiblingElement("property");
                                                }
                                        }
                                }


                                objects.push_back(object);

                                objectElement = objectElement->NextSiblingElement("object");
                        }
                        objectGroupElement = objectGroupElement->NextSiblingElement("objectgroup");
                }
        }
        else
        {
                std::cout << "No object layers found..." << std::endl;
        }

        return true;
}

Object Level::GetObject(std::string name)
{
        // &#1090;&#1086;&#1083;&#1100;&#1082;&#1086; &#1087;&#1077;&#1088;&#1074;&#1099;&#1081; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090; &#1089; &#1079;&#1072;&#1076;&#1072;&#1085;&#1085;&#1099;&#1084; &#1080;&#1084;&#1077;&#1085;&#1077;&#1084;
        for (int i = 0; i < objects.size(); i++)
                if (objects[i].name == name)
                        return objects[i];
}

std::vector<Object> Level::GetObjects(std::string name)
{
        // &#1074;&#1089;&#1077; &#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1099; &#1089; &#1079;&#1072;&#1076;&#1072;&#1085;&#1085;&#1099;&#1084; &#1080;&#1084;&#1077;&#1085;&#1077;&#1084;
        std::vector<Object> vec;
        for (int i = 0; i < objects.size(); i++)
                if (objects[i].name == name)
                        vec.push_back(objects[i]);

        return vec;
}


std::vector<Object> Level::GetAllObjects()
{
        return objects;
};


sf::Vector2i Level::GetTileSize()
{
        return sf::Vector2i(tileWidth, tileHeight);
}

void Level::Draw(sf::RenderWindow &window)
{
        // &#1088;&#1080;&#1089;&#1091;&#1077;&#1084; &#1074;&#1089;&#1077; &#1090;&#1072;&#1081;&#1083;&#1099; (&#1086;&#1073;&#1098;&#1077;&#1082;&#1090;&#1099; &#1085;&#1077; &#1088;&#1080;&#1089;&#1091;&#1077;&#1084;!)
        for (int layer = 0; layer < layers.size(); layer++)
                for (int tile = 0; tile < layers[layer].tiles.size(); tile++)
                        window.draw(layers[layer].tiles[tile]);
}

#endif

9
General / Re: Iterator erasing
« on: May 08, 2017, 11:34:43 am »
Well, I 've changed it to:
 
if ((*iter1)->life == false)
{
  delete (*iter1);
  iter1 = enemyArray.erase(iter1);
}
Didn't work, enemy was "alive" on the map (well, I mean the health was 0, but the enemy was sill moving)

10
General / Re: Enemy intersection trouble
« on: May 07, 2017, 04:12:40 pm »
THIS IS SO FUNNY, actually the problem was this little thing)))))
if (p.getRect().intersects((*iter1)->getRect()));
This little semicolon didn't allow to check if the player intersects and all the commands below started to triger
This is crazy  ;D

11
General / Iterator erasing
« on: May 07, 2017, 03:55:00 pm »
Hello, so I want my enemy to disapper when its life == false, but it doesn't, I mean I see my player jumping on the enemy because command p.dy -= 0.5; triggers, which actually tells my that the enemy doesn't erase
This is the iterator:
std::list<Entity*> enemyArray;
                std::list<Entity*>::iterator iter1;
                std::vector<Object> e = lvl.GetObjects("EasyEnemy");
                for (int i = 0; i < e.size(); i++)
                        enemyArray.push_back(new Enemy(easyEnemyImage, lvl, e[i].rect.left, e[i].rect.top, 79, 59, "EasyEnemy"));
This is the main part:
for (iter1 = enemyArray.begin(); iter1 != enemyArray.end();)
                        {
                                (*iter1)->update(time);
                                if ((*iter1)->life == false)
                                {
                                        iter1 = enemyArray.erase(iter1);
                                        delete (*iter1);
                                }
                                else { iter1++; }
                        }

                        for (iter1 = enemyArray.begin(); iter1 != enemyArray.end(); iter1++)
                        {
                                if (p.getRect().intersects((*iter1)->getRect()))
                                {
                                        if ((*iter1)->name == "EasyEnemy")
                                        {
                                                if ((p.dy > 0) && (p.onGround == false))
                                                {
                                                (*iter1)->health = 0;
                                                p.dy -= 0.5;
                                                }
                                                else
                                                {
                                                        p.dy -= 0.5;
                                                        p.dx -= 0.5;
                                                        p.health -= 25;
                                                }
                                        }
                                }
                        }
This is the draw part:
for (iter1 = enemyArray.begin(); iter1 != enemyArray.end(); iter1++)
                        {
                                window.draw((*iter1)->sprite);
                        }

I tried to do (*iter1)->life == false;, (*iter1)->health -= 100;, even in iterator update if ((*iter->health = 0),  non of those worked

Here is the whole main.cpp code:
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
#include "view.h"
#include <iostream>
#include <sstream>
#include "mission.h"
#include "iostream"
#include "level.h"
#include <vector>
#include <list>
#include "tinyxml\tinyxml.h"

using namespace sf;

class Entity {
public:
        std::vector<Object> obj;
        float dx, dy, x, y, speed, moveTimer;
        int w, h, health;
        bool life, isMove, onGround;
        Texture texture;
        Sprite sprite;
        String name;
        Entity(Image &image, float X, float Y, int W, int H, String Name) {
                x = X; y = Y; w = W; h = H; name = Name; moveTimer = 0;
                speed = 0;
                dx = 0; dy = 0;
                life = true; onGround = false; isMove = false;
                texture.loadFromImage(image);
                sprite.setTexture(texture);
                sprite.setOrigin(w / 2, h / 2);
        }

        FloatRect getRect()
        {
                return FloatRect(x, y, w, h);
        }

        virtual void update(float time) = 0;
};

        class Player :public Entity {
        public:
                int health = 100;
                enum { left, right, jump, stay } state;
                int playerScore;
                Music death;
                Music deathS;
                Music death2;
                Music soundtrack;
                Music soundtrack2;
                Music claySong;

                int Pcounter = 0;

                int Dcounter = 0;

                SoundBuffer lowhpBuffer;
                Sound lowhp;
                Player(Image &image, Level &lev, float X, float Y, int W, int H, String Name) :Entity(image, X, Y, W, H, Name){
                        playerScore = 0; state = stay; obj = lev.GetAllObjects();
                        lowhpBuffer.loadFromFile("sounds/lowhp.ogg");
                        lowhp.setBuffer(lowhpBuffer);
                        death.openFromFile("music/death.ogg"); death.setLoop(true);
                        deathS.openFromFile("music/deathS.ogg"); deathS.setVolume(100); deathS.setLoop(true);
                        death2.openFromFile("music/death2.ogg"); death2.setVolume(100);
                   soundtrack.openFromFile("music/soundtrack.ogg"); soundtrack.setVolume(50);
                   soundtrack2.openFromFile("music/soundtrack2.ogg");
                   claySong.openFromFile("sounds/claySong.ogg");
                   soundtrack.play(); soundtrack.setLoop(true);
                   claySong.play(); claySong.setLoop(true);
                   if (name == "Player1"){
                           sprite.setTextureRect(IntRect(10, 306, w, h));
                   }
           }

        void  control() {

                if (life == true) {
                        if (Keyboard::isKeyPressed(Keyboard::A)) {
                                state = left;
                                speed = 0.3;
                        }

                        if (Keyboard::isKeyPressed(Keyboard::D)) {
                                state = right;
                                speed = 0.3;
                        }

                        if ((Keyboard::isKeyPressed(Keyboard::Space) && (onGround == true))) {
                                state = jump;
                                dy = -0.5;
                                //onGround = false;
                        }
                }
        }

        void update(float time)
        {
                control();
                switch (state) {
                case left: dx = -speed; break;
                case right: dx = speed; break;
                case jump: break;
                case stay: break;
                }
                x += dx*time;
                checkCollisionWithMap(dx, 0);
                y += dy*time;
                checkCollisionWithMap(0, dy);
                if (!isMove) speed = 0;
                sprite.setPosition(x + w / 2, y + h / 2);
                if (health <= 0) { life = false; }
                if (life == true) { getplayercoordinateforview(x, y); }
                dy = dy + 0.0015*time; 

                if (life == false)
                {
                        if (Dcounter < 3000) {
                                Dcounter++;
                                if ((Dcounter >= 0) && (Dcounter < 300)) {
                                        sprite.setColor(Color(235, 65, 7));
                                        view.zoom(0.997);
                                        view.move(0, -0.05);
                                        view.rotate(0.2);
                                }
                                if ((Dcounter >= 300) && (Dcounter < 600)) {
                                        view.rotate(-0.2);
                                        view.zoom(0.997);
                                        view.move(0.2, 0.2);
                                }
                                if ((Dcounter >= 600) && (Dcounter < 670)) {
                                        view.zoom(0.990);
                                        view.move(0, -0.3);
                                }
                                if ((Dcounter >= 670) && (Dcounter < 900)) {
                                        view.move(-0.3, 0);
                                        deathS.stop();
                                }
                                if (Dcounter >= 900) {
                                        view.zoom(1.005);
                                        view.move(0.2, 0);
                                        if (Dcounter >= 1000) {
                                                view.rotate(-0.5);
                                                if (death.getVolume() > 26) {
                                                        death.setVolume(25);
                                                }
                                                if (death2.getStatus() == Sound::Playing) {

                                                }
                                                else
                                                {
                                                        death2.play();
                                                }
                                        }
                                }
                        }

                        if (death.getStatus() == Sound::Playing)
                        {

                        }
                        else
                        {
                                soundtrack.stop();
                                soundtrack2.stop();
                                claySong.stop();
                                death.play();
                                deathS.play();
                        }
                }
        }

        float getplayercoordinateX() {
                return x;
        }      

        void checkCollisionWithMap(float Dx, float Dy) {
                onGround = false;
                for (int i = 0; i<obj.size(); i++)
                if (getRect().intersects(obj[i].rect))
                {
                        if (obj[i].name == "solid")
                        {
                                if (Dy>0)       { y = obj[i].rect.top - h;  dy = 0; onGround = true; }
                                if (Dy<0)       { y = obj[i].rect.top + obj[i].rect.height;   dy = 0; }
                                if (Dx>0)       { x = obj[i].rect.left - w; }
                                if (Dx<0)       { x = obj[i].rect.left + obj[i].rect.width; }
                        }

                        if (obj[i].name == "lava")
                        {
                                if (Dy>0)       { y = obj[i].rect.top - h;  dy = 0; onGround = true; }
                                if (Dy<0)       { y = obj[i].rect.top + obj[i].rect.height;   dy = 0; }
                                if (Dx>0)       { x = obj[i].rect.left - w; }
                                if (Dx < 0)     { x = obj[i].rect.left + obj[i].rect.width; }

                                if (life = true) { life = false; }
                        }

                        if (obj[i].name == "jump")
                        {
                                if (Dy > 0)     { y = obj[i].rect.top - h;  dy = 0; }
                                if (Dy < 0)     { y = obj[i].rect.top + obj[i].rect.height;   dy = 0; }
                                if (Dx > 0)     { x = obj[i].rect.left - w; }
                                if (Dx < 0)     { x = obj[i].rect.left + obj[i].rect.width; }
                                dy -= 1.5; onGround = false;
                        }

                        if (obj[i].name == "enemy")
                        {
                                soundtrack.stop();
                                claySong.stop();
                                if (soundtrack2.getStatus() == Sound::Playing) { continue; }
                                else {
                                        soundtrack2.play();
                                     }
                                sprite.setColor(Color(237, 28, 36));
                               
                        }

                                if (obj[i].name == "poison")
                                {
                                        if (life == true) {
                                                Pcounter++;
                                                if (Pcounter >= 200) {
                                                        health -= 25;
                                                        Pcounter = 0;
                                                        lowhp.play();
                                                }
                                        }
                                }
                  }
        }

};

        class Enemy :public Entity{
        public:
                int health;
                Enemy(Image &image, Level &lvl, float X, float Y, int W, int H, String Name) :Entity(image, X, Y, W, H, Name) {
                        obj = lvl.GetObjects("solid"); health = 100;
                        if (name == "EasyEnemy") {
                                health = 100;
                                sprite.setTextureRect(IntRect(0, 0, w, h));
                                dx = 0.1;
                        }
                }

                void checkCollisionWithMap(float Dx, float Dy) {
                        for (int i = 0; i<obj.size(); i++)
                        if (getRect().intersects(obj[i].rect))
                        {
                                        if (Dy>0)       { y = obj[i].rect.top - h;  dy = 0; onGround = true; }
                                        if (Dy<0)       { y = obj[i].rect.top + obj[i].rect.height;   dy = 0; }
                                        if (Dx>0)       { x = obj[i].rect.left - w;  dx = -0.1; sprite.scale(-1, 1); }
                                        if (Dx<0)       { x = obj[i].rect.left + obj[i].rect.width; dx = 0.1; sprite.scale(-1, 1); }
                        }
                }

                void update(float time) {
                        if (name == "EasyEnemy")
                        {
                                //moveTime += time; if (moveTimer>3000) {dx*=-1; moveTimer = 0; }
                                checkCollisionWithMap(dx, 0);
                                x += dx*time;
                                sprite.setPosition(x + w / 2, y + h / 2);
                                if (health <= 0) { life = false; }
                        }
                }
        };

        int main()
        {
                sf::RenderWindow window(sf::VideoMode(1980, 1080), "Glinskii Adventures");
                view.reset(sf::FloatRect(0, 0, 640, 400));
                window.setFramerateLimit(90); // fps

                //int iterCounter = 0;

                Level lvl;
                lvl.LoadFromFile("mainmap.tmx");

                Image heroImage;
                heroImage.loadFromFile("images/hero.jpg");
                heroImage.createMaskFromColor(Color(125, 99, 86));

                Image easyEnemyImage;
                easyEnemyImage.loadFromFile("images/enemy1.jpg");
                easyEnemyImage.createMaskFromColor(Color(255, 255, 255));

                /*Image map_image;
                map_image.loadFromFile("images/map.png");
                Texture map;
                map.loadFromImage(map_image);
                Sprite map_sprite;
                map_sprite.setTexture(map);

                Image house_image;
                house_image.loadFromFile("images/house.png");
                house_image.createMaskFromColor(Color(255, 255, 255));
                Texture house;
                house.loadFromImage(house_image);
                Sprite house_sprite;
                house_sprite.setTexture(house);
                house_sprite.setPosition(80, 539);*/


                Image quest_image;
                quest_image.loadFromFile("images/tab.jpg");
                Texture quest_texture;
                quest_texture.loadFromImage(quest_image);
                Sprite s_quest;
                s_quest.setTexture(quest_texture);
                s_quest.setTextureRect(IntRect(0, 0, 224, 352));

                /*Image map2;
                map2.loadFromFile("images/map2.png");
                Texture map2texture;
                map2texture.loadFromImage(map2);
                Sprite map2s;
                map2s.setTexture(map2texture);*/


                Object player = lvl.GetObject("player");
                Object easyEnemyObject = lvl.GetObject("easyEnemy");

                /*SoundBuffer lowhpBuffer;
                lowhpBuffer.loadFromFile("sounds/lowhp.ogg");
                Sound lowhp(lowhpBuffer);*/


                /*SoundBuffer walkBuffer;
                walkBuffer.loadFromFile("sounds/walk.ogg");
                Sound walk(walkBuffer);
                walk.setVolume(100);*/


                Font font;
                font.loadFromFile("fonts/classic.TTF");

                Text text("", font, 20);
                text.setStyle(Text::Bold);

                Text pickText("", font, 20);
                pickText.setStyle(Text::Bold);

                Text text2("", font, 20);
                text2.setStyle(Text::Bold);

                Text glinPlate("", font, 20);
                glinPlate.setStyle(Text::Bold);
                glinPlate.setStyle(Text::Underlined);

                Text nickname("", font, 20);

                std::list<Entity*> enemyArray;
                std::list<Entity*>::iterator iter1;
                std::vector<Object> e = lvl.GetObjects("EasyEnemy");
                for (int i = 0; i < e.size(); i++)
                        enemyArray.push_back(new Enemy(easyEnemyImage, lvl, e[i].rect.left, e[i].rect.top, 79, 59, "EasyEnemy"));
                /*std::list<Entity*> entities;
                std::list<Entity*>::iterator it;
                std::vector<Object> e = lvl.GetObjects("EasyEnemy");
                for (int i = 0; i < e.size(); i++)
                        entities.push_back(new Enemy(easyEnemyImage, lvl, e[i].rect.left, e[i].rect.top, 79, 59, "EasyEnemy"));*/


                Player p(heroImage, lvl, player.rect.left, player.rect.top, 70, 86, "Player1");
                //Enemy easyEnemy(easyEnemyImage, lvl, easyEnemyObject.rect.left, easyEnemyObject.rect.top, 79, 59, "EasyEnemy");

                //float CurrentFrame = 0;

                Clock clock;

                Clock gameTimeClock;
                int gameTime = 0;

                bool showMissionText = true;

                while (window.isOpen())
                {

                        float time = clock.getElapsedTime().asMicroseconds();
                        clock.restart();
                        time = time / 800;
                        if (p.life == true) gameTime = gameTimeClock.getElapsedTime().asSeconds();

                        sf::Event event;

                        while (window.pollEvent(event))
                        {
                                window.setKeyRepeatEnabled(false);

                                if (event.type == sf::Event::Closed)
                                        window.close();


                                /*if (p.life == true)
                                {
                                if ((event.type == Event::KeyPressed) && (event.key.code == Keyboard::D))
                                {
                                walk.play();
                                }
                                }*/



                                /*if (p.life == false) {
                                        if (death.getStatus() == Sound::Playing) {
                                        continue;
                                        }
                                        else
                                        {
                                        soundtrack.stop();
                                        claySong.stop();
                                        death.play();
                                        deathS.play();
                                        }
                                        }*/

                                if ((event.type == Event::KeyPressed) && (event.key.code == Keyboard::Tab))

                                {
                                        switch (showMissionText)
                                        {
                                        case true:
                                        {
                                                                 std::ostringstream task;
                                                                 task << getTextMission(getCurrentMission(p.getplayercoordinateX()));
                                                                 text2.setString("\n" + task.str());
                                                                 showMissionText = false;

                                                                 glinPlate.setString("NO:");

                                                                 nickname.setString("XxX_Daun_XxX");

                                                                 break;
                                        }
                                        case false:
                                        {
                                                                  text2.setString("");
                                                                  showMissionText = true;
                                                                  break;
                                        }
                                        }
                                }
                        }

                        /*for (iter1 = enemyArray.begin(); iter1 != enemyArray.end(); iter1++)
                        {
                        window.draw(enemyArray[iterCounter].getRect);
                        iterCounter++;
                        }*/

                        /*for (iter1 = enemyArray.begin(); iter1 != enemyArray.end();)
                        {
                                (*iter1)->update(time);
                                if ((*iter1)->health = 0)
                                {
                                        iter1 = enemyArray.erase(iter1);
                                        delete (*iter1);
                                }
                                else iter1++;
                        }*/

                        for (iter1 = enemyArray.begin(); iter1 != enemyArray.end();)
                        {
                                (*iter1)->update(time);
                                if ((*iter1)->life == false)
                                {
                                        iter1 = enemyArray.erase(iter1);
                                        delete (*iter1);
                                }
                                else { iter1++; }
                        }

                        for (iter1 = enemyArray.begin(); iter1 != enemyArray.end(); iter1++)
                        {
                                if (p.getRect().intersects((*iter1)->getRect()))
                                {
                                        if ((*iter1)->name == "EasyEnemy")
                                        {
                                                if ((p.dy > 0) && (p.onGround == false))
                                                {
                                                        (*iter1)->health = 0;
                                                p.dy -= 0.5;
                                                }
                                                else
                                                {
                                                        p.dy -= 0.5;
                                                        p.dx -= 0.5;
                                                        p.health -= 25;
                                                }
                                        }
                                }
                        }


                        p.update(time);

                /*      for (it = entities.begin(); it != entities.end();)
                        {
                                //Entity *b = *it;
                                (*it)->update(time);
                                if ((*it)->life == false)
                                {
                                        it = entities.erase(it);
                                        delete (*it);
                                }
                                else { it++; }
                        }

                        for (it = entities.begin(); it != entities.end(); it++)
                        {
                              if ((*it)->getRect().intersects(p.getRect()));
                                        {
                                                if ((*it)->name == "EasyEnemy")
                                                {
                                                        if ((p.dy > 0) && (p.onGround == false))
                                                        {

                                                        }
                                                        else
                                                        {

                                                        }
                                                }

                                        }
                               
                        }*/



                        /*for (it = entities.begin(); it != entities.end(); it++) {
                                (*it)->update(time);
                                }*/


                        changeview();
                        window.setView(view);

                        window.clear();

                        lvl.Draw(window);

                        std::ostringstream playerHealthString, gameTimeString;
                        playerHealthString << p.health; gameTimeString << gameTime;
                        text.setString("Health: " + playerHealthString.str() + "\nGame time: " + gameTimeString.str());
                        text.setPosition(view.getCenter().x - 315, view.getCenter().y - 200);
                        window.draw(text);

                        std::ostringstream playerScoreString;
                        playerScoreString << p.playerScore;
                        pickText.setString("Coins: " + playerScoreString.str());
                        pickText.setPosition(view.getCenter().x + 140, view.getCenter().y - 200);
                        window.draw(pickText);

                        if (!showMissionText)
                        {
                                text2.setPosition(view.getCenter().x - 315, view.getCenter().y - 100);
                                s_quest.setPosition(view.getCenter().x - 320, view.getCenter().y - 100);
                                glinPlate.setPosition(view.getCenter().x - 315, view.getCenter().y - 100);
                                nickname.setPosition(view.getCenter().x - 20, view.getCenter().y);
                                window.draw(s_quest); window.draw(text2); window.draw(glinPlate); window.draw(nickname);
                        }

                        for (iter1 = enemyArray.begin(); iter1 != enemyArray.end(); iter1++)
                        {
                                window.draw((*iter1)->sprite);
                        }

                        window.draw(p.sprite);

                        window.display();
                }

                return 0;
        }

 

12
General / Enemy intersection trouble
« on: April 21, 2017, 09:44:45 pm »
Hello, so I added enemy iterator and my purpose was to check where from the player touched the enemy when the player intersects enemy sprite, but the problem is that when I just start the programm, all the commands in this: are being triggered rapidly, I mean they don't stop doing that, my player flies away and his health bar is always decreasing (p.dy -= 0.5; p.health-= 25;):
 
for (it = entities.begin(); it != entities.end();)
                        {
                                Entity *b = *it;
                                b->update(time);
                                if (b->life == false)
                                {
                                        it = entities.erase(it);
                                        delete b;
                                }
                                else it++;
                        }

                        for (it = entities.begin(); it != entities.end(); it++)
                        {
                                if ((*it)->getRect().intersects(p.getRect()));
                                {
                                        if ((*it)->name == "EasyEnemy")
                                        {
                                                if ((p.dy > 0) && (p.onGround == false))
                                                {
                                                        (*it)->dx = 0;
                                                        p.dy -= 0.5;
                                                        (*it)->health = 0;
                                                }
                                                else
                                                {
                                                        p.dy -= 0.5;
                                                        p.dx -= 0.5;
                                                        p.health -= 25;
                                                }
                                        }
                                }
                        }
Another thing that I noticed is that the enemy stops (the command (*it)->dx=0; triggers), and by the way if I delete the code upper, the programm works ok. So it looks like when I start the game player always intersects the enemy, no matter where the he is, I've checked location issues in Tile Map Editor and haven't found anything unusual. Here is my main.cpp code:
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
#include "view.h"
#include <iostream>
#include <sstream>
#include "mission.h"
#include "iostream"
#include "level.h"
#include <vector>
#include <list>
#include "tinyxml\tinyxml.h"

using namespace sf;

class Entity {
public:
        std::vector<Object> obj;
        float dx, dy, x, y, speed, moveTimer;
        int w, h, health;
        bool life, isMove, onGround;
        Texture texture;
        Sprite sprite;
        String name;
        Entity(Image &image, float X, float Y, int W, int H, String Name) {
                x = X; y = Y; w = W; h = H; name = Name; moveTimer = 0;
                speed = 0;
                dx = 0; dy = 0;
                life = true; onGround = false; isMove = false;
                texture.loadFromImage(image);
                sprite.setTexture(texture);
                sprite.setOrigin(w / 2, h / 2);
        }

        FloatRect getRect()
        {
                return FloatRect(x, y, w, h);
        }

        virtual void update(float time) = 0;
};

        class Player :public Entity {
        public:
                int health = 100;
                enum { left, right, jump, stay } state;
                int playerScore;
                Music death;
                Music deathS;
                Music soundtrack;
                Music soundtrack2;
                Music claySong;
                Player(Image &image, Level &lev, float X, float Y, int W, int H, String Name) :Entity(image, X, Y, W, H, Name){
                        playerScore = 0; state = stay; obj = lev.GetAllObjects();
                        death.openFromFile("music/death.ogg"); death.setLoop(true);
                        deathS.openFromFile("sounds/deathS.ogg"); deathS.setVolume(100); deathS.setLoop(true);
                   soundtrack.openFromFile("music/soundtrack.ogg"); soundtrack.setVolume(50);
                   soundtrack2.openFromFile("music/soundtrack2.ogg");
                   claySong.openFromFile("sounds/claySong.ogg");
                   soundtrack.play(); soundtrack.setLoop(true);
                   claySong.play(); claySong.setLoop(true);
                   if (name == "Player1"){
                           sprite.setTextureRect(IntRect(10, 306, w, h));
                   }
           }

        void  control() {

                if (life == true) {
                        if (Keyboard::isKeyPressed(Keyboard::A)) {
                                state = left;
                                speed = 0.3;
                        }

                        if (Keyboard::isKeyPressed(Keyboard::D)) {
                                state = right;
                                speed = 0.3;
                        }

                        if ((Keyboard::isKeyPressed(Keyboard::Space) && (onGround == true))) {
                                state = jump;
                                dy = -0.5;
                                //onGround = false;
                        }
                }
        }

        void update(float time)
        {
                control();
                switch (state) {
                case left: dx = -speed; break;
                case right: dx = speed; break;
                case jump: break;
                case stay: break;
                }
                x += dx*time;
                checkCollisionWithMap(dx, 0);
                y += dy*time;
                checkCollisionWithMap(0, dy);
                if (!isMove) speed = 0;
                sprite.setPosition(x + w / 2, y + h / 2);
                if (health <= 0) { life = false; }
                if (life == true) { getplayercoordinateforview(x, y); }
                dy = dy + 0.0015*time; 
        }

        float getplayercoordinateX() {
                return x;
        }

        void checkCollisionWithMap(float Dx, float Dy) {
                onGround = false;
                for (int i = 0; i<obj.size(); i++)
                if (getRect().intersects(obj[i].rect))
                {
                        if (obj[i].name == "solid")
                        {
                                if (Dy>0)       { y = obj[i].rect.top - h;  dy = 0; onGround = true; }
                                if (Dy<0)       { y = obj[i].rect.top + obj[i].rect.height;   dy = 0; }
                                if (Dx>0)       { x = obj[i].rect.left - w; }
                                if (Dx<0)       { x = obj[i].rect.left + obj[i].rect.width; }
                        }

                        if (obj[i].name == "lava")
                        {
                                if (Dy>0)       { y = obj[i].rect.top - h;  dy = 0; onGround = true; }
                                if (Dy<0)       { y = obj[i].rect.top + obj[i].rect.height;   dy = 0; }
                                if (Dx>0)       { x = obj[i].rect.left - w; }
                                if (Dx < 0)     { x = obj[i].rect.left + obj[i].rect.width; }

                                if (life = true) { life = false; }

                                if (death.getStatus() == Sound::Playing)
                                {
                                        continue;
                                }
                                else {
                                        death.play();
                                        deathS.play();
                                        claySong.stop();
                                        soundtrack.stop();
                                        soundtrack2.stop();
                                }
                        }

                        if (obj[i].name == "jumper")
                        {
                                if (Dy > 0)     { y = obj[i].rect.top - h;  dy = 0; }
                                if (Dy < 0)     { y = obj[i].rect.top + obj[i].rect.height;   dy = 0; }
                                if (Dx > 0)     { x = obj[i].rect.left - w; }
                                if (Dx < 0)     { x = obj[i].rect.left + obj[i].rect.width; }
                                dy -= 1.5; onGround = false;
                        }

                        if (obj[i].name == "enemy")
                        {
                                soundtrack.stop();
                                claySong.stop();
                                if (soundtrack2.getStatus() == Sound::Playing) { continue; }
                                else {
                                        soundtrack2.play();
                                     }
                                sprite.setColor(Color(237, 28, 36));
                               
                        }

                }
        }

};

        class Enemy :public Entity{
        public:
                int health;
                Enemy(Image &image, Level &lvl, float X, float Y, int W, int H, String Name) :Entity(image, X, Y, W, H, Name) {
                        obj = lvl.GetObjects("solid"); health = 100;
                        if (name == "EasyEnemy") {
                                sprite.setTextureRect(IntRect(0, 0, w, h));
                                dx = 0.1;
                        }
                }

                void checkCollisionWithMap(float Dx, float Dy) {
                        for (int i = 0; i<obj.size(); i++)
                        if (getRect().intersects(obj[i].rect))
                        {
                                        if (Dy>0)       { y = obj[i].rect.top - h;  dy = 0; onGround = true; }
                                        if (Dy<0)       { y = obj[i].rect.top + obj[i].rect.height;   dy = 0; }
                                        if (Dx>0)       { x = obj[i].rect.left - w;  dx = -0.1; sprite.scale(-1, 1); }
                                        if (Dx<0)       { x = obj[i].rect.left + obj[i].rect.width; dx = 0.1; sprite.scale(-1, 1); }
                        }
                }

                void update(float time) {
                        if (name == "EasyEnemy")
                        {
                                //moveTime += time; if (moveTimer>3000) {dx*=-1; moveTimer = 0; }
                                checkCollisionWithMap(dx, 0);
                                x += dx*time;
                                sprite.setPosition(x + w / 2, y + h / 2);
                                if (health <= 0) { life = false; }
                        }
                }
        };

        int main()
        {
                sf::RenderWindow window(sf::VideoMode(1980, 1080), "Glinskii Adventures");
                view.reset(sf::FloatRect(0, 0, 640, 400));
                window.setFramerateLimit(90); // fps

                Level lvl;
                lvl.LoadFromFile("mainmap.tmx");

                Image heroImage;
                heroImage.loadFromFile("images/hero.jpg");
                heroImage.createMaskFromColor(Color(125, 99, 86));

                Image easyEnemyImage;
                easyEnemyImage.loadFromFile("images/enemy1.jpg");
                easyEnemyImage.createMaskFromColor(Color(255, 255, 255));

                Image quest_image;
                quest_image.loadFromFile("images/tab.jpg");
                Texture quest_texture;
                quest_texture.loadFromImage(quest_image);
                Sprite s_quest;
                s_quest.setTexture(quest_texture);
                s_quest.setTextureRect(IntRect(0, 0, 224, 352));

               

                Object player = lvl.GetObject("player");

                Font font;
                font.loadFromFile("fonts/classic.TTF");

                Text text("", font, 20);
                text.setStyle(Text::Bold);

                Text pickText("", font, 20);
                pickText.setStyle(Text::Bold);

                Text text2("", font, 20);
                text2.setStyle(Text::Bold);

                Text glinPlate("", font, 20);
                glinPlate.setStyle(Text::Bold);
                glinPlate.setStyle(Text::Underlined);

                Text nickname("", font, 20);

                [b]std::list<Entity*> entities;
                std::list<Entity*>::iterator it;
                std::vector<Object> e = lvl.GetObjects("EasyEnemy");
                for (int i = 0; i < e.size(); i++)
                        entities.push_back(new Enemy(easyEnemyImage, lvl, e[i].rect.left, e[i].rect.top, 79, 59, "EasyEnemy"));[/b]

                Player p(heroImage, lvl, player.rect.left, player.rect.top, 70, 86, "Player1");
       
                Clock clock;

                Clock deathCl;

                Clock gameTimeClock;
                int gameTime = 0;

                bool showMissionText = true;

                while (window.isOpen())
                {

                        float time = clock.getElapsedTime().asMicroseconds();
                        clock.restart();
                        time = time / 800;
                        if (p.life == true) gameTime = gameTimeClock.getElapsedTime().asSeconds();

                        else {
                                p.sprite.setColor(Color(235, 65, 7));
                                view.zoom(0.997);
                                view.move(0, 0.05);
                                view.move(0.07, 0);
                                view.rotate(0.05);
                        }

                        sf::Event event;

                        while (window.pollEvent(event))
                        {
                                window.setKeyRepeatEnabled(false);

                                if (event.type == sf::Event::Closed)
                                        window.close();

                               
                                if (event.type == Event::KeyPressed)
                                if ((event.key.code == Keyboard::Tab))
                                {
                                        switch (showMissionText)
                                        {
                                        case true:
                                        {
                                                                 std::ostringstream task;
                                                                 task << getTextMission(getCurrentMission(p.getplayercoordinateX()));
                                                                 text2.setString("\n" + task.str());
                                                                 showMissionText = false;

                                                                 glinPlate.setString("entry");

                                                                 nickname.setString("XxX_Daun_XxX");

                                                                 break;
                                        }
                                        case false:
                                        {
                                                                  text2.setString("");
                                                                  showMissionText = true;
                                                                  break;
                                        }
                                        }
                                }
                        }

                        p.update(time);

                        [b]for (it = entities.begin(); it != entities.end();)
                        {
                                Entity *b = *it;
                                b->update(time);
                                if (b->life == false)
                                {
                                        it = entities.erase(it);
                                        delete b;
                                }
                                else it++;
                        }

                        for (it = entities.begin(); it != entities.end(); it++)
                        {
                                if ((*it)->getRect().intersects(p.getRect()));
                                {
                                        if ((*it)->name == "EasyEnemy")
                                        {
                                                if ((p.dy > 0) && (p.onGround == false))
                                                {
                                                        (*it)->dx = 0;
                                                        p.dy -= 0.5;
                                                        (*it)->health = 0;
                                                }
                                                else
                                                {
                                                        p.dy -= 0.5;
                                                        p.dx -= 0.5;
                                                        p.health -= 25;
                                                }
                                        }
                                }
                        }[/b]

                        changeview();
                        window.setView(view);

                        window.clear();

                        lvl.Draw(window);

                        std::ostringstream playerHealthString, gameTimeString;
                        playerHealthString << p.health; gameTimeString << gameTime;
                        text.setString("&#1047;&#1076;&#1086;&#1088;&#1086;&#1074;&#1100;&#1077;: " + playerHealthString.str() + "\n&#1042;&#1088;&#1077;&#1084;&#1103; &#1080;&#1075;&#1088;&#1099;: " + gameTimeString.str());
                        text.setPosition(view.getCenter().x - 315, view.getCenter().y - 200);
                        window.draw(text);

                        std::ostringstream playerScoreString;
                        playerScoreString << p.playerScore;
                        pickText.setString("&#1057;&#1086;&#1073;&#1088;&#1072;&#1085;&#1086; &#1095;&#1083;&#1077;&#1085;&#1086;&#1074;: " + playerScoreString.str());
                        pickText.setPosition(view.getCenter().x + 140, view.getCenter().y - 200);
                        window.draw(pickText);

                        if (!showMissionText)
                        {
                                text2.setPosition(view.getCenter().x - 315, view.getCenter().y - 100);
                                s_quest.setPosition(view.getCenter().x - 320, view.getCenter().y - 100);
                                glinPlate.setPosition(view.getCenter().x - 315, view.getCenter().y - 100);
                                nickname.setPosition(view.getCenter().x - 20, view.getCenter().y);
                                window.draw(s_quest); window.draw(text2); window.draw(glinPlate); window.draw(nickname);
                        }

                        [b]for (it = entities.begin(); it != entities.end(); it++)
                        {
                                window.draw((*it)->sprite);
                        }[/b]

                        window.draw(p.sprite);

                        window.display();
                }

                return 0;
        }
 
So what could be the problem? I'm quiet confused, I tried to use debug, but didn't get any useful info.

13
Graphics / Re: Video
« on: March 27, 2017, 09:28:44 pm »
Oh, sorry, didn't notice, thanks

14
Graphics / Re: Video
« on: March 27, 2017, 08:46:47 pm »
Can you recommend any of those libraries, and can they work with sfml?

15
Graphics / Video
« on: March 27, 2017, 06:32:41 pm »
Any possible ways to include a video tape into my code?
For example if the player picks an item, some flashbacks are appearing.

Pages: [1] 2