Вторник, 23 Апреля 2024, 19:19

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
Форум игроделов » Программирование » C/C++ » Вопрос-Ответ (C++) (Вопросы по С++ задаём здесь.)
Вопрос-Ответ (C++)
KornivalДата: Воскресенье, 04 Сентября 2011, 19:10 | Сообщение # 1
The Witcher
Сейчас нет на сайте
Чтобы не создавать отдельную тему на каждый глупый вопрос, предлагаю задавать их здесь.

Saitei: все вопросы по С задаём в теме Вопрос-Ответ (С). Благодарю за внимание!
GECKДата: Воскресенье, 01 Декабря 2013, 07:58 | Сообщение # 1101
заслуженный участник
Сейчас нет на сайте
Цитата Labirintik ()
почему этот код рисует только черный квадрат?

Предположу самое простое - переменные random1, random2 и random3 объявлены как int?


Всё гениальное просто. И хреново работает.
LabirintikДата: Воскресенье, 01 Декабря 2013, 08:21 | Сообщение # 1102
постоянный участник
Сейчас нет на сайте
Цитата GECK ()
Предположу самое простое - переменные random1, random2 и random3 объявлены как int?

Проблема оказалось в другом, надо было вместо random1(2,3)/255 написать random1(2,3)/255.0f
GECKДата: Воскресенье, 01 Декабря 2013, 08:30 | Сообщение # 1103
заслуженный участник
Сейчас нет на сайте
Смысл один - надо помнить про тип операндов в выражениях smile

Всё гениальное просто. И хреново работает.
LabirintikДата: Воскресенье, 01 Декабря 2013, 09:47 | Сообщение # 1104
постоянный участник
Сейчас нет на сайте
Можно ли натянуть спрайт на двух мерный куб в opengl ?
IzaronДата: Воскресенье, 01 Декабря 2013, 19:13 | Сообщение # 1105
Rammstein forever
Сейчас нет на сайте
Да, грузим текстуру, накладываем ее на квадрат из 2 треугольников
LabirintikДата: Понедельник, 02 Декабря 2013, 03:45 | Сообщение # 1106
постоянный участник
Сейчас нет на сайте
Цитата Izaron ()
Да, грузим текстуру, накладываем ее на квадрат из 2 треугольников

как загрузить текстуры через GLUT, найти не могу , только AUX в инете есть
nazar79Дата: Среда, 04 Декабря 2013, 21:20 | Сообщение # 1107
постоянный участник
Сейчас нет на сайте
Народ помогите с открытием и записью txt. Никак не могу разобраться. Чтоб например в файле было записано 10, а прога открыла и считывала число
IzaronДата: Среда, 04 Декабря 2013, 21:22 | Сообщение # 1108
Rammstein forever
Сейчас нет на сайте
ifstream fin("file.txt");
int i;
fin >> i;
DeswingДата: Суббота, 14 Декабря 2013, 19:15 | Сообщение # 1109
заслуженный участник
Сейчас нет на сайте
А как создать сразу много объектов? И как каждому дать id?
Просто я вот игрушку пишу... Хочу, чтобы при нажатии на объект у него вызывался деструктор... НО КАК компьютер определит id объекта и вызовет именно ЕГО деструктор?
OpenGOOДата: Воскресенье, 15 Декабря 2013, 00:46 | Сообщение # 1110
почти ветеран
Сейчас нет на сайте
Цитата Deswing ()
А как создать сразу много объектов? И как каждому дать id?


Код

#include <iostream>
#include <list>
#include <algorithm>

using namespace std;

class Object
{
private:
     static int s_nIDGenerator;
     int m_nID;

public:
     Object() { m_nID = s_nIDGenerator++; }

     int getID() const { return m_nID; }
};

int Object::s_nIDGenerator = 0;

void print(Object* o)
{
     cout << "Object id: " << o->getID() << endl;
}

int main(int argc, char** argv)
{
     list<Object*> ol;

     for (int i=0; i<20; i++)
     {
         ol.push_back(new Object);
     }

     for_each(ol.begin(), ol.end(), print);

     return 0;
}


Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]
MatouДата: Воскресенье, 15 Декабря 2013, 01:50 | Сообщение # 1111
Исходный коТ
Сейчас нет на сайте
В этом вашем С++ есть возможность объявить у класса два метода с одинаковой сигнатурой, но у одного будет спецификатор const, а у другого не будет

Код

class Foo
{
     void Bar() const;
     void Bar();
}


В каких таких случаях это может быть вообще полезным?



GameMixДата: Воскресенье, 15 Декабря 2013, 11:39 | Сообщение # 1112
старожил
Сейчас нет на сайте
Привет всем. Помогите разобраться с virtual-функциями-членами классов. Не понимаю суть virtual-функций, если такой код
Код
class basic
{
public:
        void Func() {cout << "basic Func\n";};
};

class child : public basic
{
public:
        void Func() {cout << "child's Func\n";};
};

int main()
{
basic a;
child b;

a.Func();
b.Func();

return 0;
}

Выдаёт результат:
Код
basic Func
child's Func


Steel Standoff - 2D аркада.
Мои статьи
RUNGOGET2THECHOPAHДата: Воскресенье, 15 Декабря 2013, 13:19 | Сообщение # 1113
участник
Сейчас нет на сайте
GameMix, в твоем примере не используются виртуальные методы.
IzaronДата: Воскресенье, 15 Декабря 2013, 13:20 | Сообщение # 1114
Rammstein forever
Сейчас нет на сайте
Rungo, смысл вопроса в том, что и с virtual, и без него, результат одинаковый
DestroyДата: Воскресенье, 15 Декабря 2013, 13:40 | Сообщение # 1115
постоянный участник
Сейчас нет на сайте
возник вопрос как преобразовать массив, например:
1 2 3
4 5 6
7 8 9
в массив
1 4 7
2 5 8
3 6 9
то есть пометь строки со столбцами
stalker5889Дата: Воскресенье, 15 Декабря 2013, 13:48 | Сообщение # 1116
Свободный игродел
Сейчас нет на сайте
GameMix, позднее связывание указывается при передаче обьекта функции.
Например добавь в твой код функцию
Код
void fn(basic& obj)
{
obj.Func();
}

И попробуй вызвать
Код
fn(a);
fn(b);

Добавлено (15.12.2013, 13:43)
---------------------------------------------

Цитата Destroy ()
то есть пометь строки со столбцами

Если вывод идёт через вложенный цикл то попробуй поменять циклы местами.

Добавлено (15.12.2013, 13:48)
---------------------------------------------
GameMix, Вот, скомпилируй код.

Код
#include <iostream>
using namespace std;
class basic  
{  
public:  
         void Func() {cout << "basic Func\n";}; //что бы всё работало нормально добавь virtual перед void
};  

class child : public basic  
{  
public:  
         void Func() {cout << "child's Func\n";};  
};  
void fn(basic& obj)//тут корень зла
{  
obj.Func(); //к кому обращатся? basic или child
}
int main()  
{  
basic a;  
child b;  
//a.Func();  
//b.Func();  
fn(a);  
fn(b);//компилятор не может определить что b - подкласс.
cin.get();
return 0;  
}


GameMixДата: Воскресенье, 15 Декабря 2013, 14:12 | Сообщение # 1117
старожил
Сейчас нет на сайте
stalker5889, скомпилировал. Разницу вижу. Странный C++ какой-то - там Func child'а работает, тут не работает...

Steel Standoff - 2D аркада.
Мои статьи
stalker5889Дата: Воскресенье, 15 Декабря 2013, 14:22 | Сообщение # 1118
Свободный игродел
Сейчас нет на сайте
Цитата GameMix ()
Странный C++ какой-то - там Func child'а работает, тут не работает...

По умолчанию C++ не может определить будет вызываться basic или child, так как явно написано:
void fn(basic& obj) что подразумевает использование класса basic.
Это раннее связывание которое требует меньше ресурсов и оставлено по умолчанию для совместимости с Си. Слово virtual заставляет осуществить позднее связывание то есть подставить в аргумент нужный класс (basic или child) динамически во время выполнения.


DestroyДата: Воскресенье, 15 Декабря 2013, 14:46 | Сообщение # 1119
постоянный участник
Сейчас нет на сайте
stalker5889, спасибо
еще можешь помочь
вот смотри дана граница значений, если в строке массива все числа принадлежат этой границе то записать это в другой массив, вот например:
дана граница 0..5
массив
123
456
789
результат
123
stalker5889Дата: Воскресенье, 15 Декабря 2013, 15:00 | Сообщение # 1120
Свободный игродел
Сейчас нет на сайте
Destroy, проверяй построчно и проверяй если хоть одна цифра выходит за границу интервала от 0 до 5 то перейти к следующей строчке иначе занести эту строку в массив.

Форум игроделов » Программирование » C/C++ » Вопрос-Ответ (C++) (Вопросы по С++ задаём здесь.)
Поиск:

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