Понедельник, 06 Мая 2024, 11:46

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
Форум игроделов » Записи участника » Alkosha [230]
Результаты поиска
AlkoshaДата: Воскресенье, 03 Августа 2014, 00:55 | Сообщение # 161 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
Цитата RUNGOGET2THECHOPAH ()
У тебя тут вектор пустой

а как и чем его заполнить ?
AlkoshaДата: Суббота, 02 Августа 2014, 23:21 | Сообщение # 162 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
Цитата wcpt ()
что, от одного объявления вылетает?


Одно объявление - полёт нормальный. А вот стоит мне только занести данные в какое-либо поле класса (vector <myEnemy> bird; bird[0].x = 100;) -- вылет из программы.

Цитата Snake174 ()
Пример кода бы хоть привёл.

Боюсь засмеёте. shy


Сообщение отредактировал Alkosha - Суббота, 02 Августа 2014, 23:22
AlkoshaДата: Четверг, 31 Июля 2014, 23:58 | Сообщение # 163 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
Пробую объявить векторами.

Код

vector <myEnemy> bird;
vector <myEnemy> turtle;
vector <myEnemy>spider;


Вылет из программы происходит.

Ставлю обратно стандартным массивом - не вылетает.
AlkoshaДата: Среда, 30 Июля 2014, 16:51 | Сообщение # 164 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
Есть класс условного противника myEnemy

За счёт которого объявленны разные типы противников
myEnemy enemyType1[256];
myEnemy enemyType2[256];
myEnemy enemyType3[256];

Для каждого типа инициализируется разное кол-во противников.
Где лучше хранить значение количества ? Создать отдельную структуру ?

И ещё, на следующем уровне будет уже другое количество этих противников. Как обнулить массивы enemyType[...] для повторного использования ?
AlkoshaДата: Среда, 16 Июля 2014, 21:08 | Сообщение # 165 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
Цитата Storm54 ()
Прочитай про модульное программирование.


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

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

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

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


когда-то пытался прочесть Шилдта. Начало там действительно для нубов. Но затем с каждой страницей сложность понимания возрастает по экспоненте.
Не осилил, короче.
AlkoshaДата: Понедельник, 14 Июля 2014, 14:43 | Сообщение # 166 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
Цитата 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;
AlkoshaДата: Понедельник, 14 Июля 2014, 13:51 | Сообщение # 167 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
это выходит, что в той структуре (vec2d) вовсе нет нужды?
Так ведь ?

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


Сообщение отредактировал Alkosha - Понедельник, 14 Июля 2014, 13:51
AlkoshaДата: Воскресенье, 13 Июля 2014, 22:58 | Сообщение # 168 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
чёт не видно выгоды в такой структуре.

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

Код

class mySprite
{
vec2d coord;
};
mySprite sprite

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



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

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

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


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

Покажите, пожалуйста, на примере того же класса sprite , как объединить x и y в единый вектор.
(как в irrlicht'e , например, есть тип переменной vector3df. Но в моём случае этот вектор должен быть двумерный).
AlkoshaДата: Суббота, 12 Июля 2014, 10:20 | Сообщение # 170 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
Код
  strcpy(btmap[mapln],input[j].c_str());


выбивает из программы. j = 1 (вторая строка файла с информацией карты коллизии)
mapln = 0.
AlkoshaДата: Пятница, 11 Июля 2014, 22:07 | Сообщение # 171 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
Цитата OpenGOO ()
ведь функция вообще кроме вывода строк ничего не делает.


А должна.

Вывести строки я и так без проблем могу.

Ф-ция void collis() должна занести эти строки в char *btmap[64];

Короче, вот внутри программы сейчас такая штука.


Мне надо то же самое, считанное с файла поместить в подобный массив.
Так как я файл уже начал считывать построчно, то и эти строки соответственно нужно каким-то образом впихнуть в область, куда ссылаются указатели.


Сообщение отредактировал Alkosha - Пятница, 11 Июля 2014, 22:08
AlkoshaДата: Четверг, 10 Июля 2014, 13:06 | Сообщение # 172 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
Так-с. Ресурсы и координаты удалось загрузить.
теперь карту коллизии бы туда же.
А то она до сих пор в исполняемой программе находится.
В следующем виде:
Код
static const int maplen = 20;
char *bitmap[maplen]=  
{  

//и тут фиксированное кол-во строк через запятую "....",

}


Когда построчно то же самое считываю из файла, всё ок.
Затем пытаюсь сконвертить в char* - происходит какая-то ерунда.
В консоли cout отображает всякие кракозябры, после чего выбивает из программы.

Код
void collis()
{
     int mapln=0;
     char *btmap[64];
         j+=1;
while(input[j]!="endcollis")
     {
     btmap[mapln]=(char*)input[j].c_str();
     mapln++;
     j++;
     cout<<mapln<<"  "<<btmap[mapln]<<endl;
     }
}

void deshifrator()
{
     for(int j=0;j<i;j++)
     {
         if(input[j]=="res")
         {
             priemResursov();
         }
           if(input[j]=="l1")
         {
             koordTilesL1();
         }
           if(input[j]=="l2")
         {
             koordTilesL2();
         }
            if(input[j]=="collis")
         {
             collis();
         }



Конкретно вот в этой штуке загвоздка.
Код
btmap[mapln]=(char*)input[j].c_str();

Добавлено (10.07.2014, 11:57)
---------------------------------------------
Содержимое считываемого файла

Добавлено (10.07.2014, 13:06)
---------------------------------------------
input[j] -- массив считанных строк.

AlkoshaДата: Понедельник, 07 Июля 2014, 00:03 | Сообщение # 173 | Тема: Градиент
участник
Сейчас нет на сайте
странно... так работает. Но не вижу где разница с моим листингом (за исключением названий переменных)...
AlkoshaДата: Воскресенье, 06 Июля 2014, 19:20 | Сообщение # 174 | Тема: Градиент
участник
Сейчас нет на сайте
Цитата wcpt ()
а потом результаты (которые, по идее, будут в пределах байта, почему я уже написал)


не важно, будет там инт или байт, так как там интенсивность возрастает от 0 до 255-ти, затем от 256 до 511-ти и так далее.
так же с минусовым знаком.

Я к тому, что
while(!0)
{
SDL_Color rgb;
rgb++;
render();
}

Будет постоянно мигать (постепенно возрастать яркость , затем резко гаснуть, и опять постепенно возрастать по яркости).
AlkoshaДата: Воскресенье, 06 Июля 2014, 17:24 | Сообщение # 175 | Тема: Градиент
участник
Сейчас нет на сайте
Даже если и так, я пробовал так же (Uint8) __dr , ещё когда skyColorTop был SDL_Color'ом. Тот же результат
AlkoshaДата: Воскресенье, 06 Июля 2014, 16:53 | Сообщение # 176 | Тема: Градиент
участник
Сейчас нет на сайте
Цитата wcpt ()
я написал, что проблемы, вероятно, из-за того, что у SDL_Color r g b a задаются как uint8, т.е. как беззнаковые числа. То есть,


В приведённом мною листинге уже нет SDL_Color .

Тут же своя структура с интами
Код
    struct mycolor   
{   
       int r;   
       int g;   
       int b;   
} ;


Добавлено (06.07.2014, 16:53)
---------------------------------------------
То есть тут -- int + int
Код
skyColorTop.r +(int) __dr


Сообщение отредактировал Alkosha - Воскресенье, 06 Июля 2014, 16:54
AlkoshaДата: Воскресенье, 06 Июля 2014, 16:31 | Сообщение # 177 | Тема: Градиент
участник
Сейчас нет на сайте
Код
     
struct mycolor
{
     int r;
     int g;
     int b;
} ;

public:
void sky()
{

mycolor skyColorTop={255,0,0};
mycolor skyColorBottom={0,0,255};

float _dr;
float _db;
float _dg;
float __dr;
float __db;
float __dg;

  _dr = skyColorBottom.r-skyColorTop.r;
  _dg = skyColorBottom.g-skyColorTop.g;
  _db = skyColorBottom.b-skyColorTop.b;

   _dr /= 600;
   _dg /= 600;
   _db /= 600;

for(int a=0;a<600;a+=1)
     {
__dr += _dr;
__dg += _dg;
__db += _db;

SDL_SetRenderDrawColor(renderer, skyColorTop.r +(int) __dr, skyColorTop.g +(int) __dg, skyColorTop.b +(int) __db, 255);
SDL_RenderDrawLine(renderer,0,a,800,a);

     }
}
AlkoshaДата: Воскресенье, 06 Июля 2014, 15:54 | Сообщение # 178 | Тема: Градиент
участник
Сейчас нет на сайте
Даже когда создал структуру, результат всё тот же - сплошной цвет, который указан в skyColorTop (он же clr1 )
Код
    struct mycolor
{
     int r;
     int g;
     int b;
} ;
AlkoshaДата: Воскресенье, 06 Июля 2014, 00:58 | Сообщение # 179 | Тема: Градиент
участник
Сейчас нет на сайте
Цитата
ну и конечно, если захочется линиями, то внутренний цикл убирай, ставь вместо него что-то типа line(i,0,i,height,clr_), если полоска градиента расположена в левом верхнем углу.


это и так понятно. Просто в Вашем первом варианте в теле цикла (не там где происходит попиксельное рисование линий), переменная остаётся без изменений.
Код
   for (int i=0; i<width;i++)    
            {    
                color _clr = RGB(clr1.R+dr,clr1.G+dg,clr1.B+db)    
                        
         /*
для наглядности закомментируем

          for (int j=0; j<height; j++)    
                {    
                    image.putpixel(i,j,_clr)    
                }    
        */
            }


А что касается Вашего последнего варианта, то даже не знаю, чё я делаю не так.
Градиента никакого.
Сплошной цвет получается
Структура SDL_Color'a - r,g,b,a

Код

SDL_Color skyColorTop={255,0,0,0};
SDL_Color skyColorBottom={0,0,255,255};

SDL_RenderSetScale(renderer,1,1);
SDL_SetRenderDrawBlendMode( renderer, SDL_BLENDMODE_BLEND);

float _dr;
float _db;
float _dg;
float __dr;
float __db;
float __dg;

    _dr = skyColorBottom.r-skyColorTop.r;
    _dg = skyColorBottom.g-skyColorTop.g;
    _db = skyColorBottom.b-skyColorTop.b;

     _dr /= 600;
     _dg /= 600;
     _db /= 600;

for(int a=0;a<600;a+=1)
       {
__dr += _dr;
__dg += _dg;
__db += _db;

SDL_SetRenderDrawColor(renderer, skyColorTop.r + (int)__dr, skyColorTop.g + (int)__dg, skyColorTop.b + (int)__db, 255);
SDL_RenderDrawLine(renderer,0,a,800,a);

       }
}


рисует сплошняком цветом skyColorTop (он же clr1). Как будто к нему прибавляются нули по rgb-каналам.

И даже если бы и прибавлялось что-то, ведь тут вполне возможно переполнение за значение 255 (допустим clr1.r=250, то в установке цвета к нему ещё бы прибавилось сего-нибудь (допустим единицу), то есть он бы резко спал в значение 0)


Сообщение отредактировал Alkosha - Воскресенье, 06 Июля 2014, 00:59
AlkoshaДата: Суббота, 05 Июля 2014, 08:08 | Сообщение # 180 | Тема: Градиент
участник
Сейчас нет на сайте
Но тут же в теле цикла не происходит никакого изменения
_clr остаётся постоянным.
Код

color _clr = RGB(clr1.R+dr,clr1.G+dg,clr1.B+db)


Вот например сие даёт сплошной ярко-красный цвет.

Код

SDL_Color skyColorTop={255,100,100,255};
SDL_Color skyColorBottom={255,10,10,255};

int dr = skyColorBottom.r-skyColorTop.r;
int dg = skyColorBottom.g-skyColorTop.g;
int db = skyColorBottom.b-skyColorTop.b;
dr /= stepnum;
dg /= stepnum;
db /= stepnum;

for(int a=0;a<600;a+=1)
      {
       SDL_SetRenderDrawColor(renderer, skyColorBottom.r+dr,skyColorBottom.g+dg, skyColorBottom.b+db, 255);
       SDL_RenderDrawLine(renderer,0,a,800,a);
      }


Сообщение отредактировал Alkosha - Суббота, 05 Июля 2014, 08:09
Форум игроделов » Записи участника » Alkosha [230]
Поиск:

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