Суббота, 20 Сентября 2025, 11:05

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
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 ()
Пример кода бы хоть привёл.

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


Сообщение отредактировал 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_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Дата: Вторник, 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
Поиск:

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