Результаты поиска
| |
Alkosha | Дата: Суббота, 12 Июля 2014, 10:20 | Сообщение # 61 | Тема: Вопрос-Ответ (C++) |
участник
Сейчас нет на сайте
| Код strcpy(btmap[mapln],input[j].c_str());
выбивает из программы. j = 1 (вторая строка файла с информацией карты коллизии) mapln = 0.
|
|
| |
Alkosha | Дата: Воскресенье, 13 Июля 2014, 00:46 | Сообщение # 62 | Тема: Вопрос-Ответ (C++) |
участник
Сейчас нет на сайте
| Ещё мне как-то сделали замечание, что в каждом игровом объекте координаты отдельные Код class sprite { public: float x; float y; }
И предложили сделать вектором. Только вот я не знаю как.
Покажите, пожалуйста, на примере того же класса sprite , как объединить x и y в единый вектор. (как в irrlicht'e , например, есть тип переменной vector3df. Но в моём случае этот вектор должен быть двумерный).
|
|
| |
Alkosha | Дата: Воскресенье, 13 Июля 2014, 22:58 | Сообщение # 63 | Тема: Вопрос-Ответ (C++) |
участник
Сейчас нет на сайте
| чёт не видно выгоды в такой структуре.
во всяком случае придётся объявлять отдельно x и y. Ровно как и производить операции.
Код class mySprite { vec2d coord; }; mySprite sprite
sprite.coord.x=100; sprite.coord.y=100;
Просто лишнее слово приходится ещё дописывать.
Или я не совсем догоняю в чём вся суть...
|
|
| |
Alkosha | Дата: Понедельник, 14 Июля 2014, 13:51 | Сообщение # 64 | Тема: Вопрос-Ответ (C++) |
участник
Сейчас нет на сайте
| это выходит, что в той структуре (vec2d) вовсе нет нужды? Так ведь ?
Раз установка координат происходит за счёт отдельных ф-ций.
Сообщение отредактировал Alkosha - Понедельник, 14 Июля 2014, 13:51 |
|
| |
Alkosha | Дата: Понедельник, 14 Июля 2014, 14:43 | Сообщение # 65 | Тема: Вопрос-Ответ (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 | Дата: Среда, 16 Июля 2014, 21:08 | Сообщение # 66 | Тема: Вопрос-Ответ (C++) |
участник
Сейчас нет на сайте
| Цитата Storm54 (  ) Прочитай про модульное программирование.
дело в том, что у меня почти каждый класс завязан за функцией рендеринга , объявленной в main.cpp.
Поэтому не знаю, как раскидать по файлам.Добавлено (16.07.2014, 21:08) ---------------------------------------------
Цитата OpenGOO (  ) Судя по увиденному ты ни одной книги по с++ не прочитал Читай книги, там на многие твои нубские вопросы уже даны ответы.
когда-то пытался прочесть Шилдта. Начало там действительно для нубов. Но затем с каждой страницей сложность понимания возрастает по экспоненте. Не осилил, короче.
|
|
| |
Alkosha | Дата: Среда, 30 Июля 2014, 16:51 | Сообщение # 67 | Тема: Вопрос-Ответ (C++) |
участник
Сейчас нет на сайте
| Есть класс условного противника myEnemy
За счёт которого объявленны разные типы противников myEnemy enemyType1[256]; myEnemy enemyType2[256]; myEnemy enemyType3[256];
Для каждого типа инициализируется разное кол-во противников. Где лучше хранить значение количества ? Создать отдельную структуру ?
И ещё, на следующем уровне будет уже другое количество этих противников. Как обнулить массивы enemyType[...] для повторного использования ?
|
|
| |
Alkosha | Дата: Четверг, 31 Июля 2014, 23:58 | Сообщение # 68 | Тема: Вопрос-Ответ (C++) |
участник
Сейчас нет на сайте
| Пробую объявить векторами.
Код vector <myEnemy> bird; vector <myEnemy> turtle; vector <myEnemy>spider;
Вылет из программы происходит.
Ставлю обратно стандартным массивом - не вылетает.
|
|
| |
Alkosha | Дата: Суббота, 02 Августа 2014, 23:21 | Сообщение # 69 | Тема: Вопрос-Ответ (C++) |
участник
Сейчас нет на сайте
| Цитата wcpt (  ) что, от одного объявления вылетает?
Одно объявление - полёт нормальный. А вот стоит мне только занести данные в какое-либо поле класса (vector <myEnemy> bird; bird[0].x = 100;) -- вылет из программы.
Цитата Snake174 (  ) Пример кода бы хоть привёл. Боюсь засмеёте.
Сообщение отредактировал Alkosha - Суббота, 02 Августа 2014, 23:22 |
|
| |
Alkosha | Дата: Воскресенье, 03 Августа 2014, 00:55 | Сообщение # 70 | Тема: Вопрос-Ответ (C++) |
участник
Сейчас нет на сайте
| Цитата RUNGOGET2THECHOPAH (  ) У тебя тут вектор пустой а как и чем его заполнить ?
|
|
| |
Alkosha | Дата: Воскресенье, 03 Августа 2014, 14:15 | Сообщение # 71 | Тема: Вопрос-Ответ (C++) |
участник
Сейчас нет на сайте
| Почему-то когда после Код vector <myEnemy> bird( 10 ); пишу bird.x ... -- работает
А если Код vector <myEnemy> bird; bird.x ... -- выбивает.Добавлено (03.08.2014, 14:15) --------------------------------------------- То есть надо зарезервировать память ? bird.reserve(10);
|
|
| |
Alkosha | Дата: Понедельник, 04 Августа 2014, 09:13 | Сообщение # 72 | Тема: SGDK |
участник
Сейчас нет на сайте
| Потихоньку осваиваю этот дэв-кит, и по ходу дела возникает ряд вопросов, которые я и хотел озвучить в этой ветке форума.
Хыллоу ворлд скомпилить\запустить я осилил. Даже свои тайлики смог перевести в 4 бита, и вывести в эмуляторе.
В общем, интересует какой функцией можно преобразовать типы данных (float в int, float\int в string и тд.)
Так же на вики пишут, мол, такой тип как флоат лишь эмулируется, а вместо этого лучше юзать fix16 и fix32. Но они в моей проге почему-то ведут себя как целочисленные переменные (сделал познакоместное перемещение тайла по экрану, если инкрементировать переменную в .1 -- тайл стоит на месте, а при инкременте в 1 - движется. При флоате перемещается, как при .1 (медленнее), так и при 1 (быстрее)).
|
|
| |
Alkosha | Дата: Вторник, 05 Августа 2014, 10:55 | Сообщение # 73 | Тема: 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 | Дата: Пятница, 08 Августа 2014, 14:53 | Сообщение # 74 | Тема: Масштабирование относительно центра SDL2 |
участник
Сейчас нет на сайте
| Есть такая ф-ция, которая скейлит содержимое рендерера. Scale
Как расчитать оффсет X и Y позиционирования рендерера, чтоб при изменении Z рендерер скейлился относительно центра, а не относительно начала декартовых координат (левого верхнего угла), как это делает он сейчас?
Сообщение отредактировал Alkosha - Пятница, 08 Августа 2014, 14:53 |
|
| |
Alkosha | Дата: Пятница, 08 Августа 2014, 15:11 | Сообщение # 75 | Тема: Масштабирование относительно центра 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 | Дата: Вторник, 12 Августа 2014, 15:48 | Сообщение # 76 | Тема: Масштабирование относительно центра 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 | Дата: Вторник, 12 Августа 2014, 16:50 | Сообщение # 77 | Тема: Масштабирование относительно центра 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 | Дата: Суббота, 23 Августа 2014, 03:02 | Сообщение # 78 | Тема: как за раз удалить массив текстур SDL2 ? |
участник
Сейчас нет на сайте
| Текстуры объявлены следующим образом. SDL_Texture* texSpr[256]; Чтоб их удалить, нужно проходиться по массиву, тем более нужно ещё знать размер массива. Так как не всегда кол-во texSpr достигает значения 256. Думал вектором объявить , да вот столкнулся с проблемой при добавлении новых элементов массива (которые добавляются не всегда по порядку). А именно, не знаю как корректно прописать push_back в данной ситуации.
Сообщение отредактировал Alkosha - Суббота, 23 Августа 2014, 03:03 |
|
| |
Alkosha | Дата: Суббота, 23 Августа 2014, 23:10 | Сообщение # 79 | Тема: как за раз удалить массив текстур 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 | Дата: Воскресенье, 24 Августа 2014, 03:22 | Сообщение # 80 | Тема: как за раз удалить массив текстур 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 |
|
| |
|