Суббота, 23 Ноября 2024, 00:48

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Результаты поиска
dembel52Дата: Суббота, 08 Марта 2014, 13:49 | Сообщение # 1 | Тема: Вопрос-Ответ (C++)
был не раз
Сейчас нет на сайте
Все заработало спасибо!
dembel52Дата: Пятница, 07 Марта 2014, 18:43 | Сообщение # 2 | Тема: Вопрос-Ответ (C++)
был не раз
Сейчас нет на сайте
Строки одинаковые,почему то здесь оони так отабражаются,пробовал редактировать все равно так(.
dembel52Дата: Пятница, 07 Марта 2014, 17:37 | Сообщение # 3 | Тема: Вопрос-Ответ (C++)
был не раз
Сейчас нет на сайте
Помогите пожалуйста!
Начал изучать графическую библиотеку SFML по видео уроку,но у меня неправильно отресовывается массив.
В чем может быть ошибка?
Вот код:
Код

#include <SFML/Graphics.hpp>//подключаем модуль graphics       

using namespace sf;
int ground=500;
const int H=12;
const int W=40;

String TileMap[H]=       
{
     "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB",
     "BOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOB",
     "B         O                    B",
     "B         O                    B",
     "B         O                    B",
     "B         O                    B",
     "B         O                    B",
     "B                    B",
     "B                    B",
     "B      BB            BBBBBB                    B",
     "B      BB            BBBBBB                    B",
     "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB",
             
};

class PLAYER{

public:
       float dx,dy;
       FloatRect rect;
       bool onGround;
       Sprite sprite;
       float currentFrame;

       PLAYER(Texture &image)
       {
        sprite.setTexture(image);
        rect=FloatRect(32,32,40,50);

        dx=dy=0;
        currentFrame=0;
       }

       void update(float time)
       {
        rect.left+=dx*time;
        Collision(0);
        if(!onGround) dy=dy+0.0005*time;
        rect.top+=dy*time;
        onGround=false;
        Collision(1);
              

        currentFrame+=0.0005*time;
         if(currentFrame>6) currentFrame-=6;
         if(dx>0) sprite.setTextureRect(IntRect(40*int(currentFrame),244,40,50));
         if(dx<0) sprite.setTextureRect(IntRect(40*int(currentFrame)+40,244,-40,50));

        sprite.setPosition(rect.left,rect.top);

        dx=0;
       }
       void Collision(int dir)
       {
       for(int i=rect.top/16;i<(rect.top+rect.height)/16;i++)
         for(int j=rect.left/16;j<(rect.left+rect.width)/16;j++)
         {
          if(TileMap[i][j] =='B')
          {
           if((dx>0) && (dir==0))rect.left=j*16-rect.width;
           if((dx<0) && (dir==0))rect.left=j*16+16;
           if((dy>0) && (dir==1)) {rect.top=i*16-rect.height;dy=0;onGround=true;}
           if((dy<0) && (dir==1)) {rect.top=i*16+16;dy=0;}
          }
          if(TileMap[i][j]=='O')
          {
           TileMap[i][j]=' ';
          }

         }
       }
             

};

int main()       
{       
       RenderWindow window(sf::VideoMode(600,400), "Tect");//Создаем окно размером 200х200 с заголовком "Тест"       
             
       Texture t;//создаем техстуру
       t.loadFromFile("fff.png");//загружаем картинку

       float currentFrame=0;

       PLAYER p(t);
       Clock clock;       

       RectangleShape rectangle(Vector2f(16.0,16.0));

       while (window.isOpen())//главный цикл программы, работает, пока окно открыто       
       {       
        float time = clock.getElapsedTime().asMicroseconds();
        clock.restart();
        time=time/800;
        sf::Event event;//создаем очередь событий       
        while (window.pollEvent(event))//цикл работает, пока очередь событий не пуста       
        {       
         if (event.type == sf::Event::Closed)//если жмем крестик       
         window.close();//то окно закрывается       
        }       
        if(Keyboard::isKeyPressed(Keyboard::Left))
        {
         p.dx=-0.1;
        }
        if(Keyboard::isKeyPressed(Keyboard::Right))
        {
         p.dx=0.1;
        }
        if(Keyboard::isKeyPressed(Keyboard::Up))
        {
         if(p.onGround) {p.dy=-0.4; p.onGround=false;}
        }       
        p.update(time);

        window.clear();//очистка экрана       
        for(int i=0;i<H;i++)
         for(int j=0;j<W;j++)
         {
          if(TileMap[i][j] =='B') rectangle.setFillColor(Color::Blue);
          if(TileMap[i][j] =='O') rectangle.setFillColor(Color::Red);
          if(TileMap[i][j] ==' ') continue;
          rectangle.setPosition(i*16,j*16);
          rectangle.setSize(Vector2f(16.0,16.0));
          window.draw(rectangle);//отрисовка квадрата
         }
        window.draw(p.sprite);//отрисовка спрайта       
        window.display();//отрисовка окна       
       }       
       return 0;       
}       

Вот что получается:
ссылка
Пишу в VC 2010C++ Express
Хотя спрайт взаимодействует с картой правильно


Сообщение отредактировал dembel52 - Пятница, 07 Марта 2014, 17:49
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг