Результаты поиска
| |
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, где не было никаких рендереров с масштабированиями\вращениями\сглаживаниями.
Добавлено (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);
|
|
| |
|