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

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

Войти
Регистрация
Восстановить пароль
 
R_User
0 / 0 / 0
Регистрация: 06.07.2015
Сообщений: 7
#1

Ошибка C2661 с RectangleShape в Марио на C++ - C++

26.07.2015, 14:35. Просмотров 413. Ответов 5
Метки нет (Все метки)

Код был написан по туториалу с этого видео - http://www.youtube.com/watch?v=6OHMFwQK44k. SFML подключил с помощью инструкции отсюда - http://kychka-pc.ru/sfml/urok-1-podk...udio-2013.html.

Видеоурок.

Переписанный под диктовку код.
C++
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
#include <SFML/Graphics.hpp>
 
using namespace sf;
 
int ground = 400;
 
const int H = 12;
const int W = 40;
 
String TileMap[H] = {
 
    "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB",
    "B                         B     B",
    "B                         B     B",
    "B                         B     B",
    "B                         B     B",
    "B      0000           BBBBB     B",
    "BBB                       B     B",
    "B           BB            BB    B",
    "B           BB                  B",
    "B           BB     BB           B",
    "BBBBBB    BBBBBBBBBBBBBBBBBBBBBBB",
 
};
 
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;
        if (!onGround) dy = dy + 0.0005*time;
        rect.top += dy*time;
        onGround = false;
        if (rect.top > ground) { rect.top = ground; dy = 0; onGround = true; }
        
        currentFrame += 0.005*time;
        if (currentFrame > 6) currentFrame -= 6;
        
        if (dx > 0) sprite.setTextureRect(IntRect(40 * Int16(currentFrame), 244, 40, 50));
        if (dx < 0) sprite.setTextureRect(IntRect(40 * Int16(currentFrame)+40, 244, -40, 50));
 
        sprite.setPosition(rect.left, rect.top);
    
        dx = 0;
    }
};
 
int main()
{
    RenderWindow window(VideoMode(600, 450), "Test!");
 
    Texture t;
    t.loadFromFile("fang.png");
 
    float currentFrame = 0;
 
    PLAYER p(t);
 
    Clock clock;
 
    RectangleShape rectangle(32,32);
 
    while (window.isOpen())
    {
        float Time = clock.getElapsedTime().asMicroseconds();
        clock.restart();
 
        Time = Time / 700;
 
        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);
 
        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, i * 32);
                window.draw(rectangle);
            }
 
        window.draw(p.sprite);
        window.display();
    }
 
    return 0;
}

До момента "8:54 - 9:53" с видеоурока код работал нормально, но строка #78 с RectangleShape выдала ошибку и ее замены на перечисленные ниже не помогли и, либо вызывали больше ошибок (в других строках), либо выводили окно с надписью "Debug Assertion Failed! Expression: string subscript out of range".

Описание основной ошибки.
Error C2661: sf::RectangleShape::RectangleShape: нет перегруженной функции, принимающей 2 аргументов.

IntelliSense: отсутствуют экземпляры конструктора "sf::RectangleShape::RectangleShape", соответствующие списку аргументов
(типы аргументов: (int, int)).

Неудачные варианты замены строки, взятые с этого же форума.
RectangleShape rectangle;
RectangleShape rectangle(sf::Vector2f(32.0f,32.0f));
RectangleShape rectangle();

Как починить это?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2015, 14:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка C2661 с RectangleShape в Марио на C++ (C++):

error C2661: pow: нет перегруженной функции, принимающей 1 аргументов - C++
Здравствуйте, уважаемые посетители сего форума. Набирал лабу, столкнулся вот с такой проблемой. Скриншот и код прилагаю: #include...

Разместить музыку в Марио - C++
Доброго времени суток! Помогите разместить музыку в Марио. Файлы из sfml-2.0 скопировал в папку с main. Загрурил звуки из интернета и...

Игра Марио - найти ошибку в коде - C++
Всем доброго времени суток. Вот взялся сделать платформер с помошью SFML. Написал код, чтобы персонаж двигался и прыгал. Компилятор...

нужно составить игру "Доктор Марио" - C++
Нужно написать игру &quot;доктор марио&quot;) Это игра,в которой как и в тетрисе выпадают фигурки,только состоящие из 2 частей разных цветов:...

SFML ошибка с RectangleShape - SFML
Не понимаю что означает эта ошибка и как ее исправить. Помогите пожалуйста.

Игра "Марио" - ошибка после компиляции - SFML
после того как подключил SFML игра скомпилировалась но выдает ошибку #include &lt;SFML/Graphics&gt; #include &lt;SFML/Audio&gt; using...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
DrOffset
7152 / 4293 / 968
Регистрация: 30.01.2014
Сообщений: 7,093
26.07.2015, 14:46 #2
R_User,
У меня такой вариант заработал:
C++
1
    RectangleShape rectangle(Vector2f(32,32));
В видеоуроке описывается более старая версия библиотеки.
Сверяйся с документацией при написании кода.
0
R_User
0 / 0 / 0
Регистрация: 06.07.2015
Сообщений: 7
26.07.2015, 15:05  [ТС] #3
DrOffset,
Ваш вариант мне не подошел и вызвал окно с ошибкой: "Debug Assertion Failed! Expression: string subscript out of range".
Цитата Сообщение от DrOffset Посмотреть сообщение
Сверяйся с документацией при написании кода.
Я новичок в C++/SFML. Подскажите, где брать документацию (желательно, на русском)?
0
DrOffset
7152 / 4293 / 968
Регистрация: 30.01.2014
Сообщений: 7,093
26.07.2015, 15:20 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от R_User Посмотреть сообщение
Ваш вариант мне не подошел и вызвал окно с ошибкой: "Debug Assertion Failed! Expression: string subscript out of range".
Ну так это уже другая ошибка. И не факт, что корень этой ошибки кроется в этой строке. Под отладчиком запустить надо бы, он укажет скорее всего сразу на проблемное место.
Цитата Сообщение от R_User Посмотреть сообщение
Я новичок в C++/SFML. Подскажите, где брать документацию (желательно, на русском)?
Про русский не знаю, а так на официальном сайте конечно же.

Добавлено через 7 минут
R_User, все, я нашел в чем дело. У нас тут выход за пределы массива в строках 114-123 из слишком больших значений W и H. В массиве символов 34 элемента (33 символа и ноль), а мы итерируемся по 40. Количество строк 11, а мы итерируемся по 12.
Поменяй константы на
C++
1
2
const int H = 11;
const int W = 33;
1
R_User
0 / 0 / 0
Регистрация: 06.07.2015
Сообщений: 7
26.07.2015, 16:04  [ТС] #5
DrOffset, спасибо, заработало!

P.S: Как тут вставлять картинки?
0
Миниатюры
Ошибка C2661 с RectangleShape в Марио на C++  
DrOffset
26.07.2015, 16:09     Ошибка C2661 с RectangleShape в Марио на C++
  #6

Не по теме:

Цитата Сообщение от R_User Посмотреть сообщение
P.S: Как тут вставлять картинки?
Кнопка-скрепка в форме отправки сообщения. Или в расширенном режиме кнопка "управление вложениями".

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2015, 16:09
Привет! Вот еще темы с ответами:

Марио на SFML. Ошибка "'AnimationManager' is undefined" - SFML
Всем привет! Пишу игру платформер на SFML C++.Возникла ошибка 'AnimationManager' is undefined. Здесь тексты cpp и hpp: #include...

Размытая тень для RectangleShape - SFML
В общем хочу сделать кнопку, которая бы отбрасывала тень, как на прикрепленной картинке (взял для примера обычную гугловскую кнопку из гугл...

Синхронно изменить размеры кнопки и RectangleShape - Visual Basic .NET
Поместил несколько элементов управления на RectangleShape - кнопку и 2 RadioButton. Хочу синхронно изменить размеры кнопки и шейпа. Выделяю...

Марио - C++ Builder
Хотел создать игру на подобии Марио. только не знаю как сделать так чтобы когда персонаж бегал к примеру на право то задний план двигался...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.07.2015, 16:09
Ответ Создать тему
Опции темы

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