Форум программистов, компьютерный форум CyberForum.ru

Нужно сделать автоматическое движение персонажа - C++

Восстановить пароль Регистрация
 
Fr1kson
22 / 0 / 0
Регистрация: 28.02.2014
Сообщений: 48
15.05.2014, 08:40     Нужно сделать автоматическое движение персонажа #1
C++ (Qt)
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#include <SFML/Graphics.hpp>
 
using namespace sf;
 
 
float offsetX=0, offsetY=0;
 
 
const int H = 12;
const int W = 40;
 
 
String TileMap[H] = {
 
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB",
"B                                B     B",
"B                                B     B",
"B                                B     B",
"B                                B     B",
"B         0000                BBBB     B",
"B                                B     B",
"BBB                              B     B",
"B              BB                BB    B",
"B              BB                      B",
"B    B         BB         BB           B",
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB",
 
}; 
 
class PLAYER {
 
public:
 
float dx,dy;
FloatRect rect;
bool onGround;
Sprite sprite;
float currentFrame;
 
    PLAYER(Texture &image)
   {
    sprite.setTexture(image);
    rect = FloatRect(7*32,9*32,40,50);
 
    dx=dy=0.1;
    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.005*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 - offsetX, rect.top - offsetY);
 
      dx=0;
   }
 
 
 
   void Collision(int dir)
   {
     for (int i = rect.top/32 ; i<(rect.top+rect.height)/32; i++)
      for (int j = rect.left/32; j<(rect.left+rect.width)/32; j++)
        { 
         if (TileMap[i][j]=='B') 
           { 
            if ((dx>0) && (dir==0)) rect.left =  j*32 -  rect.width; 
            if ((dx<0) && (dir==0)) rect.left =  j*32 + 32;
            if ((dy>0) && (dir==1))  { rect.top =   i*32 -  rect.height;  dy=0;   onGround=true; }
            if ((dy<0) && (dir==1))  { rect.top = i*32 + 32;   dy=0;}
           }
         
         if (TileMap[i][j]=='0') 
                           { 
                             TileMap[i][j]=' ';
                           }
                
        }
   
   }
};
 
int main()
{
    RenderWindow window( VideoMode(600, 400), "Test!");
 
    Texture t;
    t.loadFromFile("fang.png");
 
    float currentFrame=0;
 
    PLAYER p(t);
 
    Clock clock;
 
    RectangleShape rectangle( Vector2f(32,32));
 
    while (window.isOpen())
    {
        float time = clock.getElapsedTime().asMicroseconds();
        clock.restart();
 
        time = time/700;
        
        if (time>20) time = 20;
 
        Event event;
        while (window.pollEvent(event))
        {
            if (event.type == 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.35; p.onGround=false;}
        }
 
        p.update(time);
 
        if (p.rect.left>300) offsetX = p.rect.left - 300;
        offsetY = p.rect.top - 200;
 
        window.clear(Color::White);
 
 
         for (int i=0; i<H; i++)
             for (int j=0; j<W ; j++)
                { 
                  if (TileMap[i][j]=='B') rectangle.setFillColor(Color::Black);
 
                  if (TileMap[i][j]=='0')  rectangle.setFillColor(Color::Green);
 
                  if (TileMap[i][j]==' ') continue;
 
                  rectangle.setPosition(j*32-offsetX,i*32 - offsetY) ; 
                  window.draw(rectangle);
             }
    
        window.draw(p.sprite);
        window.display();
    }
 
    return 0;
}
вот моя игра, по сути в ней пока ничего нет, но я хотел бы сделать чтобы персонаж двигался сам , а я мог прыгать и нагибаться
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2014, 08:40     Нужно сделать автоматическое движение персонажа
Посмотрите здесь:

C++ Отображение движения персонажа
Как сделать автоматическое обновление C++
даны 2 последовательности в файлах, в двух разных, нужно их обьединить и отсортировать по возрастанию. Но нужно сделать прогу с помошью указателей C++
Как сделать автоматическое копирование данных при их изменении? C++
C++ SDL и задержка движения персонажа при зажатии клавиши
C++ Нужно сделать что бы давало рандомно числа и нужно написать ответ
Движение объекта по XY. Как сделать чтобы программа считала FaceUnit как градусы C++
Нужно сделать задание по c++! Через 3 часа нужно сдать! C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
15.05.2014, 08:50     Нужно сделать автоматическое движение персонажа #2
Вам нужен алгоритм поиска пути:
Работа с графами. Алгоритм Дейкстры
Выкладываю реализацию алгоритма Дейкстры на С++
Алгоритм Дейкстры
Параллельная реализация алгоритма Дейкстры
Задача с использованием алгоритма Дейкстры

Не по теме:

Цитата Сообщение от Fr1kson Посмотреть сообщение
а я мог прыгать и нагибаться
А сколько лет вы ждали эту игру?

Croessmah
15.05.2014, 10:36     Нужно сделать автоматическое движение персонажа
  #3

Не по теме:

Цитата Сообщение от SatanaXIII Посмотреть сообщение
А сколько лет вы ждали эту игру?
джва

Yandex
Объявления
15.05.2014, 10:36     Нужно сделать автоматическое движение персонажа
Ответ Создать тему
Опции темы

Текущее время: 17:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru