Четверг, 05 Декабря 2024, 06:04

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
AlkoshaДата: Вторник, 07 Октября 2014, 10:15 | Сообщение # 141 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
Реально ли (если реально, то как) сделать функцию так, чтоб ей можно было передавать три аргумента, а так же можно было бы и два аргумента передавать, не указывая третий (при этом третий аргумент принимал бы дэфолтное значение, указанное внутри функции) ?

То есть
чтобы можно было бы одну и ту же функцию и так вызывать: func(X,Y,Z);
и вот так: func(X,Y); [чтоб компилятор не ругался на некорректное количество аргументов]
AlkoshaДата: Воскресенье, 05 Октября 2014, 01:10 | Сообщение # 142 | Тема: Обнуляется один из элементов массива.
участник
Сейчас нет на сайте
Цитата Alkosha ()
Может я дико туплю...

Точно туплю.

Спасибо, выручили.
AlkoshaДата: Суббота, 04 Октября 2014, 23:04 | Сообщение # 143 | Тема: Обнуляется один из элементов массива.
участник
Сейчас нет на сайте
Не пойму, почему обнуляется один из элементов массива, тогда как остальные элементы ведут себя адекватно.
Может я дико туплю...

Код

class myPers
{
int ft[4];//frametime
...

void attackready()
{
if(power<128)power++;
dx=0;
ft[4]++;
cout <<ft[4]<<endl;
attackf=true;
if(ft[4]>20){frameNum=16;}
else
if(ft[4]>10)frameNum=15;
else
if (ft[4]>0)frameNum=14;
}
...
}
myPers *pers = new myPers;

Более ft[4] нигде не фигурирует.


Сообщение отредактировал Alkosha - Суббота, 04 Октября 2014, 23:06
AlkoshaДата: Пятница, 12 Сентября 2014, 02:07 | Сообщение # 144 | Тема: Морфинг текстур на SDL2. Реально ?
участник
Сейчас нет на сайте
Так то да. В быдло-тоадс морфинга не происходит по сути, так как дендя аппаратно не способна на такие вещи, только строго "пререндеренные" тайлы из ПЗУ выводит (хотя в некоторых случаях умудряются даже векторную графику (игра "elite") заносить в область ОЗУ, а затем из неё видео-генератором выводить потайлово.)
А это, между прочим, вполне интересная мысля. Ведь в моём случае можно поступить так же - отрендерить несколько кадров вращения.
Кстати, на NES есть порт nebulus'a, только называется castelian. Графон там покруче спектрумовского (в виду наличия тайл\спрайт-генератора, и ПЗУ картриджа денди больше по килобайтам, чем встроенного ОЗУ тогдашнего спектрума. Это щас аматоры допаивают в спектрум по 4 мегабайта ОЗУ и видеоконтроллеры VGA-уровня).

По поводу шреддеров на оупенГЛ - в Шреддерах я нубец , это раз. И я даже не осилю настроить проект кодблокса на SDL2+openGL , это два.

Добавлено (11.09.2014, 12:31)
---------------------------------------------

Цитата -l33t-h4xx- ()
Если возможность использовать GPU не интересует

GPU уже используется, так как в SDL2 есть хардварная поддержка 2д. Но шреддеров там всё ещё нет, увы. Всё сводится к одному - прикрутить параллельно openGL

Добавлено (12.09.2014, 02:02)
---------------------------------------------
Готово:

Добавлено (12.09.2014, 02:07)
---------------------------------------------
С платформами сложнее будет. Так как в данный момент "движок" (если мою парашу вообще можно так назвать) ориентирован исключительно на стандартный "платфоринг" типа Марио (только с возможностью перемещения вдоль по ступенькам).

AlkoshaДата: Среда, 10 Сентября 2014, 23:15 | Сообщение # 145 | Тема: Морфинг текстур на SDL2. Реально ?
участник
Сейчас нет на сайте
Можно ли с минимальной нагрузкой на CPU (то есть без попиксельного считывания текстуры, a-ля getpixel setpixel) морфить текстурки помимо вытягивания по вертикали\горизонтали ?
В частности интересен вот этот эффект
https://www.youtube.com/watch?v=tuLgJeXBB-A#t=53
https://www.youtube.com/watch?f....#t=2415

В принципе мысль есть. Нужно просто выстроить тайлы с горизонтальным сжатием по синусу (или косинусу) в полупериод.
Сложно будет подгонять позиционирование каждого тайла.


Сообщение отредактировал Alkosha - Четверг, 11 Сентября 2014, 01:07
AlkoshaДата: Воскресенье, 31 Августа 2014, 19:00 | Сообщение # 146 | Тема: как за раз удалить массив текстур SDL2 ?
участник
Сейчас нет на сайте
Цитата -l33t-h4xx- ()
? А то layer1 удаляй tileTex, layer2 удаляй - в результате одна и та же память освобождается два раза.


Таки верное замечание. Данке шон.
AlkoshaДата: Воскресенье, 31 Августа 2014, 10:24 | Сообщение # 147 | Тема: как за раз удалить массив текстур SDL2 ?
участник
Сейчас нет на сайте
Код

class myTileTex
{
     public:
     bool mirror=false;
     SDL_Rect rect;
     SDL_Texture * tex;
     myTileTex()
     {
         tex=nullptr;
     };
     void load( char* filename )
     {
     tex = IMG_LoadTexture(renderer, filename);
     SDL_QueryTexture(tex, NULL, NULL, &rect.w, &rect.h);
     }
     ~myTileTex()
     {
           if (tex) {
                 SDL_DestroyTexture(tex);
                 tex= nullptr;
               }
     }
};

myTileTex *tileTex[ 255 ];
tileTex[0] = new myTileTex();

Добавлено (31.08.2014, 10:24)
---------------------------------------------
Всё-таки вот такое объявление сработало.

Код

myTileTex *tileTex = new myTileTex[255];


Прога пашет норм, а вот по завершению, если выйти из неё - крашит.

ТайлТєкс взаимосвязан с классом лэйер.
При загрузке
Код
layer1->SetTilePos(a,b,c);

на лэйер (слой) добавляются тайлтэксы (картинки разного размера, так что тайлами их сложно назвать)
Код

class layer
{
int r=255,g=255,b=255;
public:
float far;
int tilenum;
SDL_Rect position[255];
int indextile[255];
layer()
{
tilenum=0;
}

void RGB(int R,int G,int <img src="http://s12.ucoz.net/sm/1/cool.gif" border="0" align="absmiddle" alt="cool" />
{
     r=R;g=G;b=B;
}
void mirror()
{
   tileTex[tilenum].mirror=true;
}

   void SetTilePos(int i,int x,int y)
     {

   position[tilenum].x = x*32; // установка позиции тайлов
   position[tilenum].y = y*32;

   indextile[tilenum]= i;
   tilenum++;
     }

void display(){

for(int i=0;i<tilenum; i++)
{

SDL_Rect DestRb1;
DestRb1.x = position[i].x-cum.x/far;
DestRb1.y = position[i].y-cum.y;

DestRb1.w =(tileTex[indextile[i]].rect.w);
DestRb1.h =(tileTex[indextile[i]].rect.h);
if(DestRb1.x>0-DestRb1.w&&DestRb1.x<800){

int r1,g1,b1;

if(r>=256||g>=256||b>=256)
     {
          if(r>=256)int r1=r-255;
           else r1=0;
      if(g>=256)int g1=g-255;
       else g1=0;
      if(b>=256)int b1=b-255;
       else b1=0;

SDL_SetTextureColorMod(tileTex[indextile[i]].tex,r1,g1,b1);
     }
     else
     SDL_SetTextureColorMod(tileTex[indextile[i]].tex,0,0,0);

SDL_SetTextureBlendMode(tileTex[indextile[i]].tex,SDL_BLENDMODE_BLEND );

if(tileTex[i].mirror)
{
SDL_RendererFlip flip = SDL_FLIP_HORIZONTAL;
SDL_RenderCopyEx(renderer, tileTex[indextile[i]].tex ,  NULL, &DestRb1, NULL, NULL, flip);
}else
SDL_RenderCopy(renderer, tileTex[indextile[i]].tex ,  NULL, &DestRb1);//маска

if(r>=256||g>=256||b>=256)
     {
  if(r>=256) r1=255;
  else r1=r;
if(g>=256) g1=255;
else g1=g;
if(b>=256) b1=255;
else b1=b;
         SDL_SetTextureColorMod(tileTex[indextile[i]].tex,r1,g1,b1);
    }
else SDL_SetTextureColorMod(tileTex[indextile[i]].tex,r,g,b);

SDL_SetTextureBlendMode(tileTex[indextile[i]].tex,SDL_BLENDMODE_ADD );

if(tileTex[i].mirror)
{
SDL_RendererFlip flip = SDL_FLIP_HORIZONTAL;
SDL_RenderCopyEx(renderer, tileTex[indextile[i]].tex ,  NULL, &DestRb1, NULL, NULL, flip);
}else
SDL_RenderCopy(renderer, tileTex[indextile[i]].tex,  NULL, &DestRb1);

}
}
}
~layer()
     {

         delete[] tileTex;

     }
};

layer *layer1= new layer;
layer *layer2= new layer;


Код

class myTileTex
{
     public:
     bool mirror=false;
     SDL_Rect rect;
     SDL_Texture * tex;
     myTileTex()
     {
         tex=nullptr;
     };
     void load( char* filename )
     {
     tex = IMG_LoadTexture(renderer, filename);
     SDL_QueryTexture(tex, NULL, NULL, &rect.w, &rect.h);
     }
     ~myTileTex()
     {
           if (tex) {
                 SDL_DestroyTexture(tex);
                 tex= nullptr;
               }
     }
};

myTileTex *tileTex = new myTileTex[255];


по завершению выполняю.
Код
delete [] layer1;
delete [] layer2;


Прога стала крашить после того, как я сделал тайлтэкс и лэйер "в куче". До этого нормально завершало программу.
AlkoshaДата: Четверг, 28 Августа 2014, 19:06 | Сообщение # 148 | Тема: как за раз удалить массив текстур SDL2 ?
участник
Сейчас нет на сайте
Цитата Snake174 ()
myObject *obj[ 255 ];

obj[0] = new myObject(...);


вот тут на второй строке пишет
Цитата
E:\TURBO\platform3\main.cpp|808|error: 'tileTex' does not name a type|


(tileTex - это то же, что и в вашем примере obj)
AlkoshaДата: Четверг, 28 Августа 2014, 09:55 | Сообщение # 149 | Тема: как за раз удалить массив текстур SDL2 ?
участник
Сейчас нет на сайте
C динамическим массивом и конструктором\деструктором разобрался.

Но вот как создать "в куче" массив определённого объекта ?

пробовал myObject *obj [255]= new myObject; (и так пробовал myObject *obj = new myObject[255];)
Компилятор ругается (точное содержание его ругани не запомнил).
Конструктор и деструктор в классе присутствует. Один объект создаётся\уничтожается корректно.

Заодно хотелось бы узнать, как этот массив потом дэстройнуть.
AlkoshaДата: Воскресенье, 24 Августа 2014, 14:26 | Сообщение # 150 | Тема: как за раз удалить массив текстур SDL2 ?
участник
Сейчас нет на сайте
Цитата OpenGOO ()
Texture texSpr[256];    
texSpr[nomer_kadra].load(filename, renderer);


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

И я вот что думаю. Если уничтожить объект, то и указатели на текстуры должны уничтожиться. Следовательно, и память должна освободиться ?
AlkoshaДата: Воскресенье, 24 Августа 2014, 03:22 | Сообщение # 151 | Тема: как за раз удалить массив текстур SDL2 ?
участник
Сейчас нет на сайте
Цитата goldsphere ()
ТК у тебя двухмерный массив.
http://cppstudio.com/post/432/


Странно.
// удаление двумерного динамического массива
for (int count = 0; count < 2; count++)
delete []ptrarray[count];

Но когда я у себя сделал
for(int i=0;i<63;i++)
delete[] collisMap.bitmap[i];
То получил удаление только первой строки...

Даже не первой строки, а лишь её части


Сообщение отредактировал Alkosha - Воскресенье, 24 Августа 2014, 03:29
AlkoshaДата: Суббота, 23 Августа 2014, 23:10 | Сообщение # 152 | Тема: как за раз удалить массив текстур SDL2 ?
участник
Сейчас нет на сайте
Цитата -l33t-h4xx- ()
Покажи нам, как ты пишешь. Так?


ну пока у меня обычным массивом, а не вектором.
Код
SDL_Texture* texSpr[256];
texSpr[nomer_kadra] = IMG_LoadTexture(renderer, filename);

Ни каких сюрфейсов.

Цитата -l33t-h4xx- ()
Хочу также на всякий случай добавить, что "за раз" ничего никогда не удаляется. Так не бывает.


Ну тогда думаю проще будет всё же стандартным массивом и оставить, и очистку выполнять в цикле.
Разница в отличии от вектора разве что будет только в этом.
Цитата -l33t-h4xx- ()
Обычно в таком случае люди хранят размер массива в отдельной переменной

Ну и в выделении области памяти, конечно же.

Но правильным ли будет такое решение...не знаю даже.

Добавлено (23.08.2014, 23:10)
---------------------------------------------
И ещё вопросец по динамическому массиву.
Вот объявлен он у меня так char **bitmap=new char *[64];
Пробую его удалить так delete[] collisMap.bitmap; - ничего не происходит. Как массив и его содержимое были так и остались на месте.

Сообщение отредактировал Alkosha - Суббота, 23 Августа 2014, 16:52
AlkoshaДата: Суббота, 23 Августа 2014, 03:02 | Сообщение # 153 | Тема: как за раз удалить массив текстур SDL2 ?
участник
Сейчас нет на сайте
Текстуры объявлены следующим образом.
SDL_Texture* texSpr[256];
Чтоб их удалить, нужно проходиться по массиву, тем более нужно ещё знать размер массива. Так как не всегда кол-во texSpr достигает значения 256.
Думал вектором объявить , да вот столкнулся с проблемой при добавлении новых элементов массива (которые добавляются не всегда по порядку). А именно, не знаю как корректно прописать push_back в данной ситуации.


Сообщение отредактировал Alkosha - Суббота, 23 Августа 2014, 03:03
AlkoshaДата: Вторник, 12 Августа 2014, 16:50 | Сообщение # 154 | Тема: Масштабирование относительно центра SDL2
участник
Сейчас нет на сайте
Цитата Saitei ()
Кумера?))0)


неа. Читается как "кам" (проверочное слово СumShot , транскрипция "Камшот").

Ну а по делу, хотел сказать, что сглаживание пашет отличненько. Дело в том, что таргет-текстуру надо было инициализировать после
Код
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "best");

То бишь, это моя оплошность была всё-таки.

Добавлено (12.08.2014, 16:50)
---------------------------------------------
И немножычко оффтопный вопрос.
Есть ли прямая поддержка шейдеров на SDL2 ? Или же тут всё так же по старинке OpenGL надо цеплять параллельно ?

Сообщение отредактировал Alkosha - Вторник, 12 Августа 2014, 16:46
AlkoshaДата: Вторник, 12 Августа 2014, 15:48 | Сообщение # 155 | Тема: Масштабирование относительно центра SDL2
участник
Сейчас нет на сайте
Чёт всё равно не догоняю.
screen->w/2; и screen->h/2; - это значения разрешения экрана ведь.
Оно-то у меня и так константное, смысла нет его постонно вычислять при апдейте камеры, так как в итоге всё равно получаю масштабирование относительно левого\верхнего угла.

Меняется масштаб рендерера ( обозванный переменной Z (в диапазоне от 0.1 до 4.0 )).
Нужно относительно него (значения Z) как-то расчитать оффсет

Добавлено (09.08.2014, 11:43)
---------------------------------------------
Цитата
SDL_BlitSurface


Это вообще первый SDL, где не было никаких рендереров с масштабированиями\вращениями\сглаживаниями.

Добавлено (11.08.2014, 18:01)
---------------------------------------------
Ещё попробую пошаманить с этим.
http://wiki.libsdl.org/SDL_Ren....ruct%29
Предварительно занеся в выводимую текстуру содержимое рендерера.

Добавлено (11.08.2014, 18:05)
---------------------------------------------
Правда гонять туда-сюда буффер изображения малость изварщённый вариант, по сравнению с OpenGL-ой функцией смещения glTranslatef.
Но аналогов в SDL2 лично я не нашёл.

Добавлено (12.08.2014, 13:42)
---------------------------------------------
Мдааа...ужжж....
Оказывается привязка center никак не сказывается на ректангл выводимой текстуры.
Она только задёт точку вращения.
Код
a pointer to a point indicating the point around which dstrect will be rotated (if NULL, rotation will be done aroud dstrect.w/2, dstrect.h/2)


и каким образом скейлить текстуру относительно центра?
Если например
dstrect.w=800*cum.Z;
dstrect.h=600*cum.Z;

Как расчитать смещение ?
dstrect.x=0 - [?];
dstrect.y=0 - [?];

Добавлено (12.08.2014, 13:44)
---------------------------------------------
С таким же успехом можно было бы просто рисовать напрямую в рендерер с некоторым смещением объектов, а затем скейлить. Результат тот же.

Добавлено (12.08.2014, 15:48)
---------------------------------------------
Так получилось отцентровать зум.

Код
SDL_Rect dstrect;
dstrect.w=800*cum.z;
dstrect.h=600*cum.z;
dstrect.x=400-400*cum.z;
dstrect.y=300-300*cum.z;


но чего-то при рендеринге в текстуру не работает фильтрация. Или то я где-то допустил оплошность, пока переделывал под render-to-texture. Ща буду смотреть.


Сообщение отредактировал Alkosha - Вторник, 12 Августа 2014, 13:53
AlkoshaДата: Пятница, 08 Августа 2014, 15:11 | Сообщение # 156 | Тема: Масштабирование относительно центра SDL2
участник
Сейчас нет на сайте
Цитата Saitei ()
Адаптацию картинки под разрешение экрана делаешь?

там когда инициализируется рендерер, я фиксированное значение разрешения задал (800*600), и не парюсь над этим.

Добавлено (08.08.2014, 15:11)
---------------------------------------------
Цитата Saitei ()
Хотя я уверен, что в SDL есть реализация переноса


Я вообще просто создал класс камеры.
И когда вывожу спрайты на экран, то sprite.x-=cum.x, sprite.y-=cum.y.

То есть, когда камера движется влево -- то спрайты вправо и наоборот, так же и по Y.

Вот нужен оффсет для этой камеры.


Сообщение отредактировал Alkosha - Пятница, 08 Августа 2014, 15:14
AlkoshaДата: Пятница, 08 Августа 2014, 14:53 | Сообщение # 157 | Тема: Масштабирование относительно центра SDL2
участник
Сейчас нет на сайте
Есть такая ф-ция, которая скейлит содержимое рендерера.
Scale

Как расчитать оффсет X и Y позиционирования рендерера, чтоб при изменении Z рендерер скейлился относительно центра, а не относительно начала декартовых координат (левого верхнего угла), как это делает он сейчас?


Сообщение отредактировал Alkosha - Пятница, 08 Августа 2014, 14:53
AlkoshaДата: Вторник, 05 Августа 2014, 10:55 | Сообщение # 158 | Тема: SGDK
участник
Сейчас нет на сайте
Цитата wcpt ()
Интерполяцию тайла при промежуточных значениях его позиции?


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

Просто я же уже вроде как пояснил:
Цитата Alkosha ()
При флоате перемещается, как при .1 (медленнее), так и при 1 (быстрее)).


Например float i=0; for(;i<20;i+=.1) против float i=0; for(;i<20;i++)
То есть значение переменной i при итерации в 1 быстрее достигнет значения 20 , нежели при .1

Добавлено (04.08.2014, 10:57)
---------------------------------------------
Цитата wcpt ()
Ты попробуй эти "флоаты" в другом деле, не в перемещении тайла.

Я и так планирую юзать их в другом деле.
Но перемещение тайла для теста, дабы наглядно было видно, меняется ли значение переменной.

Так как для вывода значения этой переменной на экран, её нужно предварительно сконвертить в стринги, но я пока не знаю как это делается. Следовательно, выход нашёл лишь в перемещении тайлов.

Добавлено (04.08.2014, 23:34)
---------------------------------------------
Скачал с вики тутор по спрайтам. Компилятор ругается на _spritedef (undeclarated <first use in this function>)

Добавлено (05.08.2014, 00:30)
---------------------------------------------
Поповоду траблы гугл ссылается на некий форум на http://gendev.spritesmind.net , но даже к нему доступа нет.

Добавлено (05.08.2014, 10:45)
---------------------------------------------
А вот и решение, вроде.

Цитата
I need to update tutorials, the structure is now called SpriteDef.
If you replace all "spritedef_" occurence with "SpriteDef" it should work


сцылко

Добавлено (05.08.2014, 10:48)
---------------------------------------------
Теперь всё пашет. Проверено.

Добавлено (05.08.2014, 10:55)
---------------------------------------------
Теперь бы найти нормальный редактор, который визуально был разбивал пикчу на знакоместа.

как тут (это какой-то плагин фаташопа, или встроенная функция ? В фаташопе я не спец. Преимущественно пиксель-артю в paint dot net'e)



Сообщение отредактировал Alkosha - Понедельник, 04 Августа 2014, 10:57
AlkoshaДата: Понедельник, 04 Августа 2014, 09:13 | Сообщение # 159 | Тема: SGDK
участник
Сейчас нет на сайте
Потихоньку осваиваю этот дэв-кит, и по ходу дела возникает ряд вопросов, которые я и хотел озвучить в этой ветке форума.

Хыллоу ворлд скомпилить\запустить я осилил.
Даже свои тайлики смог перевести в 4 бита, и вывести в эмуляторе.

В общем, интересует какой функцией можно преобразовать типы данных (float в int, float\int в string и тд.)

Так же на вики пишут, мол, такой тип как флоат лишь эмулируется, а вместо этого лучше юзать fix16 и fix32. Но они в моей проге почему-то ведут себя как целочисленные переменные (сделал познакоместное перемещение тайла по экрану, если инкрементировать переменную в .1 -- тайл стоит на месте, а при инкременте в 1 - движется. При флоате перемещается, как при .1 (медленнее), так и при 1 (быстрее)).
AlkoshaДата: Воскресенье, 03 Августа 2014, 14:15 | Сообщение # 160 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
Почему-то когда после
Код
vector <myEnemy> bird( 10 );

пишу bird.x ... -- работает

А если
Код
vector <myEnemy> bird;

bird.x ... -- выбивает.

Добавлено (03.08.2014, 14:15)
---------------------------------------------
То есть надо зарезервировать память ?
bird.reserve(10);

Поиск:

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