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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Fr1kson
22 / 0 / 0
Регистрация: 28.02.2014
Сообщений: 48
#1

Ошибка "String subscript out of range" - C++

14.05.2014, 22:03. Просмотров 514. Ответов 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
#include <SFML/Graphics.hpp>
using namespace sf;
int ground = 400;
int i;
 
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                        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; // rect - переменная в которй хранятся координаты Hero
    bool onGround; // переменная которая отвечает за местоположение Hero(на земле или нет)
    Sprite sprite;
    float currentFrame;// текущий кадр
    
    PLAYER(Texture &image)
    {
        sprite.setTexture(image); //загрузка картинки
        rect = FloatRect(0,0,50,50);
 
        dx=dy=0.1;
        currentFrame = 0;
    }
 
    void update(float time)
   {    
 
     rect.left += dx * time;    
     CollisionX(); //столкновение героя по X
 
     if (!onGround) dy=dy+0.0005*time; //если Hero не на земле то он падает с ускорением 0.0005
     rect.top += dy*time; //rect.top координата y
     onGround=false;
     CollisionY();
     if(rect.top > ground) {rect.top = ground ;dy=0; onGround = true;}
 
     currentFrame +=0.005*time;
     if(currentFrame > 9) currentFrame -=9;
 
     if (dx>0) sprite.setTextureRect(IntRect(50*int(currentFrame),200,50,50));
     if (dx<0) sprite.setTextureRect(IntRect(50*int(currentFrame)+50,200,-50,50));
 
     sprite.setPosition(rect.left, rect.top);
     dx=0;
   }
    void CollisionX()// столкновение героя по X
    {
        for(int j =rect.top/32; j<(rect.top+rect.height)/32; j++)
            for(int j =rect.left/32; j<(rect.left+rect.width)/32; j++)
            {
                if(TileMap[i][j]=='B') //если одна из плиток явл стенкой
                {
                    if(dx>0) rect.left = j*32 - rect.width;
                    if(dx<0) rect.left = j*32 + 32;
                }
            }
    }
    void CollisionY()// столкновение героя по Y
    {
        for(int j =rect.top/32; j<(rect.top+rect.height)/32; j++)
            for(int j =rect.left/32; j<(rect.left+rect.width)/32; j++)
            {
                if(TileMap[i][j]=='B') //если одна из плиток явл стенкой
                {
                    if(dx>0) {rect.top = i*32 - rect.height; dy=0; onGround= true;}
                    if(dx<0) {rect.top = i*32 + 32; dy=0;}
                }
            }
    }
};
int main()
{
    RenderWindow window( VideoMode(600, 450), "Platformer"); // создание окна размером 400х600 под названием Platformer
    
    Texture t; // загруза персонажа
    t.loadFromFile("hero.png");
 
    float currentFrame=0; // переменная в которой хранится номер текущего кадра
 
    PLAYER p(t);
 
    Clock clock;
 
    RectangleShape rectangle;
 
    while (window.isOpen())
    {
        float time = clock.getElapsedTime().asMicroseconds();
        clock.restart();
        time = time/500;
 
        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;} //если Hero на земле только тогда он может прыгнуть
        }
        p.update(time);
 
        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]==' ') continue;
 
                rectangle.setPosition(j*32,i*32) ;
                rectangle.setSize(Vector2f(32.0,32.0));
                window.draw(rectangle);
            }
 
        window.draw(p.sprite);
        window.display(); // вывод на экран
    }
    return 0;
}
вот собственно мой код.
Ошибка "String subscript out of range"
ошибки в основном с необявленной переменной i, но как только я ее объявляю выскакивает иная ошибка
ПОДСКАЖИТЕ ЧТО СДЕЛАТЬ
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2014, 22:03     Ошибка "String subscript out of range"
Посмотрите здесь:

Ошибка: string subscript out of range C++
Ошибка String subscript out of range C++
C++ Хеш-таблицы: string subscript out of range
Ошибка string subscript out of range C++
Исправьте ошибку string subscript out of range C++
C++ Тип string и subscript out of range
String subscript out of range при создании динамического массива C++
C++ String subscript out of range
C++ Ошибка expression string subscript out of range
C++ Ошибка при быстрой сортировке файла: "string subscript out of range"
C++ Debug Assertion Failed! Expression: string subscript out of range
C++ Debug assertion failed : string subscript out of range

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4944 / 4282 / 1431
Регистрация: 14.04.2014
Сообщений: 16,801
14.05.2014, 22:55     Ошибка "String subscript out of range" #2
Отладчиком смотри на какой строке ошибка.
Yandex
Объявления
14.05.2014, 22:55     Ошибка "String subscript out of range"
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru