Вторник, 16 Апреля 2024, 09:27

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

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

Saitei: все вопросы по С задаём в теме Вопрос-Ответ (С). Благодарю за внимание!
pelmenkaДата: Четверг, 01 Августа 2013, 18:09 | Сообщение # 1041
Драгоценный Тунеядец
Сейчас нет на сайте
В деструкторе класса пишишь delete [] pi;

Сталина в каждый дом!
goldsphereДата: Четверг, 01 Августа 2013, 18:32 | Сообщение # 1042
заслуженный участник
Сейчас нет на сайте
Так деструктору неизвестен pi.
-------------------------------------
Появился у меня вариант идентифицировать предметы по ID, и вместо vector<Item*> vi; хранить просто динамический массив
int *ArrayID. Но тогда Класс инвентаря должен иметь доступ к объектам классов предметов.


FinderX - Android Аркада

Сообщение отредактировал goldsphere - Четверг, 01 Августа 2013, 18:36
GameMixДата: Воскресенье, 04 Августа 2013, 11:43 | Сообщение # 1043
старожил
Сейчас нет на сайте
Привет знатокам C++. До последнего пытался справиться с проблемой сам, но не вышло.
Есть класс:
Код
class MyStrings
{
public:
        MyStrings() {}
        ~MyStrings() {}
        char[] GetText() {return Text;}
private:
         char Text[255];

Проблема в том, что я не знаю, как возвращать массив символов (не значение типа String), чтобы можно было использовать функцию класса следующим образом:
Код
MyStrings stroka;
cout << stroka.GetText();

Нужна помощь в реализации такого, если это возможно.


Steel Standoff - 2D аркада.
Мои статьи
ArchidoДата: Воскресенье, 04 Августа 2013, 12:06 | Сообщение # 1044
Сэнсэй
Сейчас нет на сайте
GameMix
Так указатель же надо вернуть:
Код

const char* GetText() const {
     return Text;
}    


Можно еще так:
Код

class MyStrings    
{
...

     operator const char* () const {
       return Text;
     }

...
};

MyStrings stroka;
std::cout << stroka;

smile

Добавлено (04.08.2013, 12:06)
---------------------------------------------
goldsphere
Почему бы просто в ф-ции удаления инвентаря не делать delete vi[_index]; ? Тока нужен виртуальный деструктор.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Воскресенье, 04 Августа 2013, 12:11
GameMixДата: Воскресенье, 04 Августа 2013, 12:43 | Сообщение # 1045
старожил
Сейчас нет на сайте
Archido, благодарю! Второй вариант вообще супер, как я и хотел happy

Steel Standoff - 2D аркада.
Мои статьи
FatherIsDarkДата: Воскресенье, 04 Августа 2013, 14:46 | Сообщение # 1046
почетный гость
Сейчас нет на сайте
Извините за тупой вопрос ,ну отличии Float и Double какие
stalker5889Дата: Воскресенье, 04 Августа 2013, 15:00 | Сообщение # 1047
Свободный игродел
Сейчас нет на сайте
Цитата (FatherIsDark)
Извините за тупой вопрос ,ну отличии Float и Double какие

У Double больше знаков после запятой можно поставить. Т.е. больше точность и диапазон значений.
float - размер 4 байта, точность 7 знаков.
double - размер 8 байт, точность 16 знаков.




Сообщение отредактировал stalker5889 - Воскресенье, 04 Августа 2013, 15:01
FatherIsDarkДата: Воскресенье, 04 Августа 2013, 15:05 | Сообщение # 1048
почетный гость
Сейчас нет на сайте
Цитата (stalker5889)
У Double больше знаков после запятой можно поставить. Т.е. больше точность и диапазон значений.
float - размер 4 байта, точность 7 знаков.
double - размер 8 байт, точность 16 знаков.

так почему везде используется Double ? это же не оптимальный вариант
stalker5889Дата: Воскресенье, 04 Августа 2013, 15:15 | Сообщение # 1049
Свободный игродел
Сейчас нет на сайте
Цитата (FatherIsDark)
так почему везде используется Double ? это же не оптимальный вариант

Боятся что у float диапазон значений закончится. biggrin
Диапазон float
от 3.4028 в 38 степени
до -3.4028 в -38 степени
Диапазон double
от 1.7977 в 308 степени
до -1.7977 в -308 степени
Если твои числа не будут больше/меньше 162100411395741389517,43616825285 то юзай float.




Сообщение отредактировал stalker5889 - Воскресенье, 04 Августа 2013, 15:20
FatherIsDarkДата: Воскресенье, 04 Августа 2013, 15:20 | Сообщение # 1050
почетный гость
Сейчас нет на сайте
Цитата (stalker5889)
Боятся что у float диапазон значений закончится. biggrin
Диапазон float
от 3.4028 в 38 степени
до -3.4028 в -38 степени
Диапазон double
от 1.7977 в 308 степени
до -1.7977 в -308 степени

ну может в этом проблема лагов Minecraft?,
как лучше сделать массив игрового мира?
stalker5889Дата: Воскресенье, 04 Августа 2013, 15:23 | Сообщение # 1051
Свободный игродел
Сейчас нет на сайте
Цитата (FatherIsDark)
как лучше сделать массив игрового мира?

Если в 2D
int map[размерность][размерность];
Если в 3D
int map[размерность][размерность][размерность];
Цитата (FatherIsDark)
ну может в этом проблема лагов Minecraft?,

Типо того. Только там int (или long int).




Сообщение отредактировал stalker5889 - Воскресенье, 04 Августа 2013, 15:25
FatherIsDarkДата: Воскресенье, 04 Августа 2013, 15:28 | Сообщение # 1052
почетный гость
Сейчас нет на сайте
Цитата (stalker5889)
Типо того. Только там int (или long int).

Скорее Long int и double для координат
pelmenkaДата: Воскресенье, 04 Августа 2013, 15:36 | Сообщение # 1053
Драгоценный Тунеядец
Сейчас нет на сайте
Цитата (FatherIsDark)
Скорее Long int и double для координат

Нотч давно сказал, что там int


Сталина в каждый дом!
FatherIsDarkДата: Воскресенье, 04 Августа 2013, 15:39 | Сообщение # 1054
почетный гость
Сейчас нет на сайте
Цитата (pelmenka)

Нотч давно сказал, что там int

Minecraft Coder Pack сказал.
TideSДата: Пятница, 09 Августа 2013, 06:36 | Сообщение # 1055
заслуженный участник
Сейчас нет на сайте
Цитата (pelmenka)
Нотч давно сказал, что там int

Таки интересно почему. Во всех движках, с которыми работал, везде координаты именно во float.
goldsphereДата: Суббота, 10 Августа 2013, 15:10 | Сообщение # 1056
заслуженный участник
Сейчас нет на сайте
TideS, ну, для более плавного передвижения.
в int допустим передвижение самое медленное 1(не считая ноль). А во float или double можно дробные значения.

Добавлено (10.08.2013, 15:10)
---------------------------------------------
Archido, я уже решил проблему. Я сделал не вектор, а динамический массив. Потом просто перегрузил функцию AddToInventory, для каждого предмета и делал в ней ItemArray[_index] = new тип предмета. И в деструкторе инвентаря удалял занятые ячейки.


FinderX - Android Аркада

Сообщение отредактировал goldsphere - Суббота, 10 Августа 2013, 15:10
GameMixДата: Суббота, 17 Августа 2013, 09:41 | Сообщение # 1057
старожил
Сейчас нет на сайте
Привет.
Код
bool ObjectSetSprite(short objID, short sprID)
{
if (objID < nom && sprID < Nspr)
  {
  hgeSprite *_spr = new hgeSprite(*Sprite[sprID]);
  Object[objID]->sprite_index = _spr;
  delete _spr; // эта строчка даёт сбой
  _spr = 0;
  return true;
  }
else return false;
}

Как известно, ненужные указатели нужно удалять и обнулять, но почему-то в таких случаях программа даёт сбой. Не понимаю, почему, ведь указатель дальше в функции не используется. А при повторном обращении к функции он снова создаётся, поэтому всё должно быть нормально, на мой взгляд. Объясните, в чем проблема?


Steel Standoff - 2D аркада.
Мои статьи
pelmenkaДата: Суббота, 17 Августа 2013, 10:18 | Сообщение # 1058
Драгоценный Тунеядец
Сейчас нет на сайте
GameMix, мб delete [] _spt ?

Сталина в каждый дом!
GameMixДата: Суббота, 17 Августа 2013, 11:01 | Сообщение # 1059
старожил
Сейчас нет на сайте
pelmenka, нет, у меня _spr - указатель, а не массив указателей.

Steel Standoff - 2D аркада.
Мои статьи
НохчиДата: Суббота, 17 Августа 2013, 11:49 | Сообщение # 1060
заслуженный участник
Сейчас нет на сайте
GameMix, а память вообще выделяется? Проверь.

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

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