Воскресенье, 25 Сентября 2022, 17:40

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

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

Saitei: все вопросы по С задаём в теме Вопрос-Ответ (С). Благодарю за внимание!
AlkoshaДата: Воскресенье, 13 Июля 2014, 00:46 | Сообщение # 1321
участник
Сейчас нет на сайте
Ещё мне как-то сделали замечание, что в каждом игровом объекте координаты отдельные
Код

class sprite  
{
public:
float x;
float y;
}


И предложили сделать вектором. Только вот я не знаю как.

Покажите, пожалуйста, на примере того же класса sprite , как объединить x и y в единый вектор.
(как в irrlicht'e , например, есть тип переменной vector3df. Но в моём случае этот вектор должен быть двумерный).
OpenGOOДата: Воскресенье, 13 Июля 2014, 02:18 | Сообщение # 1322
почти ветеран
Сейчас нет на сайте
Код
struct vec2d
{   
     vec2d() : x(0), y(0) {}
     vec2d(float x, float y) : x(x), y(y) {}
      
     float x, y;
}


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

[GameMaker: Studio v1.4.9999]
AlkoshaДата: Воскресенье, 13 Июля 2014, 22:58 | Сообщение # 1323
участник
Сейчас нет на сайте
чёт не видно выгоды в такой структуре.

во всяком случае придётся объявлять отдельно x и y. Ровно как и производить операции.

Код

class mySprite
{
vec2d coord;
};
mySprite sprite

sprite.coord.x=100;
sprite.coord.y=100;



Просто лишнее слово приходится ещё дописывать.

Или я не совсем догоняю в чём вся суть...
OpenGOOДата: Понедельник, 14 Июля 2014, 10:47 | Сообщение # 1324
почти ветеран
Сейчас нет на сайте
Да, не догоняешь, по причине что ты не читаешь книги по программированию и чужой код.

Доступ к членами класса следует осуществлять через интерфейс, например через такой

Цитата
void setX(float posX);
void setY(float posY);
void setPosition(float posX, float posY);


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

[GameMaker: Studio v1.4.9999]
AlkoshaДата: Понедельник, 14 Июля 2014, 13:51 | Сообщение # 1325
участник
Сейчас нет на сайте
это выходит, что в той структуре (vec2d) вовсе нет нужды?
Так ведь ?

Раз установка координат происходит за счёт отдельных ф-ций.


Сообщение отредактировал Alkosha - Понедельник, 14 Июля 2014, 13:51
OpenGOOДата: Понедельник, 14 Июля 2014, 14:17 | Сообщение # 1326
почти ветеран
Сейчас нет на сайте
В твоем конкретном случае (пустой класс), не нужно. Но поскольку ты даже не знаешь какую тебе реализацию выбрать, то можешь воспользоваться интерфейсом, ведь координаты можно ещё хранить в массиве или в типе Point например. Вся радость выбора, ждёт тебя wink

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

[GameMaker: Studio v1.4.9999]
AlkoshaДата: Понедельник, 14 Июля 2014, 14:43 | Сообщение # 1327
участник
Сейчас нет на сайте
Цитата Alkosha ()
В твоем конкретном случае (пустой класс),

он пустой , потому-что это лишь пример.

На самом деле мой класс таков.

Код

class myPers
{
private:
int ft;//frametime
int idletime=0;
int jumptime=0;

public:

bool onGround;
float x;
float y;
int frameNum;
float dx;
float dy;
int  damage=0;
int power = 80;
     void frameMove()
     {
     ft++;
     int t=7;//время кадра
     for(int i=0;i<7;i++)
         {

         if(ft>(0+(i*t))&&ft<=(t+(i*t)))frameNum=i+1;
         }
     if(ft>7*t)ft=0;

     }

     void idle()
     {
         idletime++;
         if(idletime<20)frameNum=0;
         if(idletime>=20&&idletime<30)frameNum=12;
         if(idletime>=30&&idletime<40)frameNum=13;
         if(idletime>=40&&idletime<50)frameNum=12;
         if (idletime>=50)
         {idletime=0;}

     }
     void movePers(int fb)
     {
     if(fb==1&&onGround&&jumptime==0)
         {
             mitalizd.mirror=true;
             frameMove();
             dx=-4;
         }
     if(fb==2&&onGround)
         {

             mitalizd.mirror=false;
             frameMove();
             dx=4;
         }
     if(fb==3&&onGround)// джамп
         {
            dy=-14;
         }

     }

};
myPers pers;
Storm54Дата: Понедельник, 14 Июля 2014, 14:47 | Сообщение # 1328
постоянный участник
Сейчас нет на сайте
Прочитай про модульное программирование. А то в конце концов у тебя каша получится.
OpenGOOДата: Понедельник, 14 Июля 2014, 15:10 | Сообщение # 1329
почти ветеран
Сейчас нет на сайте
Alkosha, судя по увиденному ты ни одной книги по с++ не прочитал smile Читай книги, там на многие твои нубские вопросы уже даны ответы.

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

[GameMaker: Studio v1.4.9999]
HPlusDieseДата: Вторник, 15 Июля 2014, 08:41 | Сообщение # 1330
участник
Сейчас нет на сайте
Цитата
А то в конце концов у тебя каша получится

Уже получилась.
AlkoshaДата: Среда, 16 Июля 2014, 21:08 | Сообщение # 1331
участник
Сейчас нет на сайте
Цитата Storm54 ()
Прочитай про модульное программирование.


дело в том, что у меня почти каждый класс завязан за функцией рендеринга , объявленной в main.cpp.

Поэтому не знаю, как раскидать по файлам.

Добавлено (16.07.2014, 21:08)
---------------------------------------------

Цитата OpenGOO ()
Судя по увиденному ты ни одной книги по с++ не прочитал Читай книги, там на многие твои нубские вопросы уже даны ответы.


когда-то пытался прочесть Шилдта. Начало там действительно для нубов. Но затем с каждой страницей сложность понимания возрастает по экспоненте.
Не осилил, короче.
MR_BorgДата: Понедельник, 21 Июля 2014, 10:56 | Сообщение # 1332
участник
Сейчас нет на сайте
Здравствуйте коллеги, разрабатывая игру столкнулся с проблемой сохранения всех данных для дальнейшего воспроизведения.
Имеется: класс родитель, от него наследуются несколько видов классов которые являются игровыми объектами(игрок, нпс, вещи). Получается, что в родителе хранятся некоторые общие переменные. У производных есть свои переменные, которые мало влияют на остальные. Так нпс могут в себе хранить вещи(в виде списков).
Читал про сериализацию, пока пытаюсь сам разобраться. Вопрос, может кто имел дело с сохранением и загрузкой, т.е. как сохранить и загрузить без потери связей между классами?


Изучаю C++ попутно пишу игру.
OpenGOOДата: Понедельник, 21 Июля 2014, 11:08 | Сообщение # 1333
почти ветеран
Сейчас нет на сайте
MR_Borg, а по конкретнее можно, что сделал, что получилось, что хотел получить.

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

[GameMaker: Studio v1.4.9999]
MR_BorgДата: Понедельник, 21 Июля 2014, 11:18 | Сообщение # 1334
участник
Сейчас нет на сайте
OpenGOO, У меня есть класс ядро(который находится в векторе) От него наследуется несколько видов.
1- кораблики( хранят около 20 переменных, часть из них общая- лежит в классе ядро, часть собственная)
2- вещи, у каждого кораблика есть инвентарь, вещи могут валяться просто или лежать в инвентаре или установлены на кораблики.

Хотелось сделать так чтоб это все можно было сохранить и так же загрузить.
Что сделано: сделал сохранение только корабля игрока(просто в файл поочередно вынес все переменные, потом тип вещей в инвентаре и какие установлены). Но проблема в том что кораблей множество и каждый может взаимодействовать друг с другом. Пока сделал при загрузке игры рандомную расстановку но так теряются некоторые аспекты.


Изучаю C++ попутно пишу игру.
OpenGOOДата: Понедельник, 21 Июля 2014, 11:26 | Сообщение # 1335
почти ветеран
Сейчас нет на сайте
MR_Borg, в чем проблема сохранить состояние каждого корабля, ведь каждый хранить только свою копию данных?

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

[GameMaker: Studio v1.4.9999]
MR_BorgДата: Понедельник, 21 Июля 2014, 11:30 | Сообщение # 1336
участник
Сейчас нет на сайте
OpenGOO, я пока над этим думаю, если лепить в один файл придется сильно поднапрячься по поводу разделения данных, количество то переменных может меняться. Ладно пока сам подумаю, может что получится.

Изучаю C++ попутно пишу игру.
OpenGOOДата: Понедельник, 21 Июля 2014, 11:55 | Сообщение # 1337
почти ветеран
Сейчас нет на сайте
MR_Borg, сохраненные данные хотя бы первое храни в текстовом формате, например в xml
<ship id=0 x=10.0 y=50.0 \>
<ship id=1 x=20.0 y=150.0 \>

Ты откуда данные загружаешь, чтобы создать уровень?


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

[GameMaker: Studio v1.4.9999]
MR_BorgДата: Понедельник, 21 Июля 2014, 12:00 | Сообщение # 1338
участник
Сейчас нет на сайте
Цитата OpenGOO ()
Ты откуда данные загружаешь, чтобы создать уровень?

Дело в том что у меня космическая леталка, мир разделен на регионы. Каждый регион в своем файле( там переменных от силы 9-12)
А по поводу текстовых файлов, спасибо буду пробовать.


Изучаю C++ попутно пишу игру.
Vip_and_RipДата: Понедельник, 21 Июля 2014, 23:46 | Сообщение # 1339
почетный гость
Сейчас нет на сайте
Тему не создаю, а задаю тут очень глупой вопрос.

Вот есть скрипт (думаю, все с ним хорошо знакомы).

Добавляю к нему Transform.position, что бы загружались нужные координаты - и никакой реакции. Ошибки нет, но толку никакого. Вроде все по инструкции сделал. В чем ошибка?


Больше никогда не буду делать игры.
goldsphereДата: Вторник, 22 Июля 2014, 03:20 | Сообщение # 1340
заслуженный участник
Сейчас нет на сайте
Vip_and_Rip, совсем не по теме, С++ тут не причём. По Unity и C# есть отдельные разделы...

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

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