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

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
AlkoshaДата: Понедельник, 27 Октября 2014, 13:41 | Сообщение # 101 | Тема: Как на с++ делать графические приложения
участник
Сейчас нет на сайте
Цитата elianyyf ()
отрисовать что то и т.д


Я конечно не экспэрт в таких делах, но полагаю, что тут только есть вариант залезть в ДОС, предварительно распаковав турбо си-пи-пи от Борланда. Делаешь асмовскую вставку
Код
asm
     mov ax,13h
     int 10h
     end;  

И в режиме 320*240*8bit рисуешь попиксельно всё шо хошь напрямую,
по адресам сегмента 0XA000
Код

pokeb(0XA000, x*320+y,[0-255])


Никакого тебе высокоуровневого программирования, сам себе хозяин.

Но лучше для ДОСа юзать Watcom.

Добавлено (27.10.2014, 13:41)
---------------------------------------------
Цитата elianyyf ()
Вопрос - как с помощью с++ без различных библиотек, с нуля,

Относительно аппаратной графики, как уже было сказано выше - напиши свою ОСь.... С НУЛЯ.


Сообщение отредактировал Alkosha - Понедельник, 27 Октября 2014, 13:42
AlkoshaДата: Вторник, 28 Октября 2014, 08:17 | Сообщение # 102 | Тема: Движок Irrlicht
участник
Сейчас нет на сайте
У меня такой вопрос, отсекает ли иррлихт невидимые трианглы?
Или же для этого нужно написать определённый коТ (в этом случае хотелось бы взглянуть на этот самый коТ) ?
AlkoshaДата: Вторник, 28 Октября 2014, 23:15 | Сообщение # 103 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
Можно ли в векторе хранить структуру ?
Код
struct partic
{
int life;
float x;
float y;
float dx,dy;
int fade;
};

vector <partic> partics;


компилится без эрроров.
Код
for(int i=0;i<maxcount;i++)
     {
     partics.push_back(partic());
     inipartic(i);
     }


Но в месте присвоения значений программа крашит.
Код

void inipartic(int idx)
{
   partics[idx].life=rand()%(lifemax-lifemin)+lifemin; // тут, например.
....
}
AlkoshaДата: Среда, 29 Октября 2014, 21:57 | Сообщение # 104 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
Цитата OpenGOO ()
у него ошибка времени выполнения, например (lifemax-lifemin) может быть равен 0


Хммм... а ведь действительно.
Ибо с присвоениями
Код
partics[idx].x=rand()%(rectangle.w)+rectangle.x;
   partics[idx].y=rand()%(rectangle.h)+rectangle.y;
   partics[idx].dx=rand()%(int)(maxspeedX-minspeedX)+minspeedX;
   partics[idx].dy=rand()%(int)(maxspeedY-minspeedY)+minspeedY;

всё ок.

Вы правы.

В таком случае , каким образом задать диапазон рандомных чисел, лежащих в пределе от lifemin до lifemax ?

rand()%(lifemax)+lifemin; тут порой будет перебор. Число будет выходить за lifemax. Надо lifemax тогда ограничить.

Может так?
int RND= lifemax-lifemin;
rand()%(RND)+lifemin;
AlkoshaДата: Пятница, 31 Октября 2014, 23:51 | Сообщение # 105 | Тема: Партиклы
участник
Сейчас нет на сайте
Делаю самодельную систему партикл https://www.youtube.com/watch?feature=player_detailpage&v=H7410ubOs1Q

И по ходу дела возник вопрос.

есть флаг enable который выключает\включает партиклы.
В данный момент в цикле апдейта

Код
        if(enable){
         for(int i=0;i<maxcount;i++)
             {
               Апдейт партикл
             }


То есть, при изменении значения enable будет происходить резкое исчезновение\появление всех частиц. Не красиво.
AlkoshaДата: Воскресенье, 02 Ноября 2014, 09:30 | Сообщение # 106 | Тема: Партиклы
участник
Сейчас нет на сайте
Вот коТ.

Код
class myParticles
{

struct partic
{
float psize;
int life;
float x;
float y;
float dx,dy;
int fade;
};

SDL_Rect texRect;
vector <partic> partics;

public:
float minsize, maxsize;
SDL_Rect rectangle;
int maxspeedY, minspeedY, maxspeedX, minspeedX;
int lifemin;
int lifemax;
int blend;
int maxcount;
bool gravity;
bool enable;
float fadespeed;
myParticles()
{
enable=true;
endpartic=false;
}
private:
     void inipartic(int idx)
{

   partics[idx].psize= minsize+(float)(rand()%(int)(maxsize*100 - minsize*100 + 1))/100;
   partics[idx].x=rand()%(rectangle.w)+rectangle.x;

   partics[idx].y=rand()%(rectangle.h)+rectangle.y;

   partics[idx].dx=(float)(rand()%(maxspeedX-minspeedX+1))/10+(float)minspeedX/10;
   partics[idx].dy=(float)(rand()%(maxspeedY-minspeedY+1))/10+(float)minspeedY/10;
partics[idx].life=lifemin+(rand()%(int)(lifemax - lifemin + 1));

}

SDL_Texture * particTex;

public:

void init(char* tex, float _minsize,float _maxsize,int _maxcount, SDL_Rect _rectangle ,int _lifemin,  int _lifemax , int _minspeedX, int _maxspeedX, int _minspeedY, int _maxspeedY, float _fadespeed, bool _gravity, int _blend)
{
minsize=_minsize;
maxsize=_maxsize;
blend=_blend;
fadespeed=_fadespeed;
maxcount=_maxcount;
rectangle=_rectangle;
lifemin=_lifemin;
lifemax=_lifemax;
minspeedX=_minspeedX;
maxspeedX=_maxspeedX;
minspeedY=_minspeedY;
maxspeedY=_maxspeedY;
gravity=_gravity;
     loadTex(tex);
      for(int i=0;i<maxcount;i++)
     {
     partics.push_back(partic());
     inipartic(i);
     }
}

     void loadTex( char* filename )
     {
     particTex = IMG_LoadTexture(renderer, filename);
     SDL_QueryTexture(particTex, NULL, NULL, &texRect.w, &texRect.h);
     }

     void update()
     {
         if(enable){
         for(int i=0;i<maxcount;i++)
             {

                if(gravity)partics[i].dy+=GRAVITATION;
                 partics[i].y+=partics[i].dy;
                 partics[i].x+=partics[i].dx;
                 partics[i].life--;

                 partics[i].fade+=fadespeed;
                 if(partics[i].fade>=255)
                     {
                     partics[i].life=0;
                     partics[i].fade=0;
                     }

                 if(partics[i].life<=0)inipartic(i);
             }
         }
     }
     void display()
     {
         if(enable){
           for(int i=0;i<maxcount;i++)
             {
                 SDL_Rect DestRs;
                 DestRs.x=partics[i].x-cum.x;
                 DestRs.y=partics[i].y-cum.y;
                 if(DestRs.x<800&&DestRs.x>0-texRect.w){

   if(blend==0) SDL_SetTextureBlendMode(particTex, SDL_BLENDMODE_BLEND);
   if(blend==1) SDL_SetTextureBlendMode(particTex, SDL_BLENDMODE_ADD);
   if(blend==2) SDL_SetTextureBlendMode(particTex, SDL_BLENDMODE_MOD);
   if(blend==3) SDL_SetTextureBlendMode(particTex, SDL_BLENDMODE_NONE);

                 DestRs.w=texRect.w*partics[i].psize;
                 DestRs.h=texRect.h*partics[i].psize;

                 SDL_SetTextureAlphaMod(particTex,255-partics[i].fade);
                 SDL_RenderCopy(renderer, particTex ,  &texRect, &DestRs);
                 }
             }
     }
     }
};


Первым делом инициализируются партиклы (кол-во частиц, диапазон размера спрайтов, мин\макс время жизни, начальное ускорение, режим смешивания и тд.).
Затем функцией update() обновляется всё в главном цикле.
И в цикле рендеринга отрисовывается функцией display()

Добавлено (02.11.2014, 09:30)
---------------------------------------------
И ещё не решён вопрос с динамическим изменением количества партиклов.
Хотя можно изменять maxcount в убывающую сторону. Но если задать maxcount больше, чем было при инициализации - то будет фатал эррор.
Нужно динамически расширить вектор.

AlkoshaДата: Воскресенье, 02 Ноября 2014, 23:42 | Сообщение # 107 | Тема: Партиклы
участник
Сейчас нет на сайте
Цитата MR_Borg ()
создаем еще цастиц();


дело в том, что создаются они единожды - при инициализации.
В дальнейшем в цикле они циркулируют. То бишь, когда время жизни заканчивается, всё та же частица принимает начальное положение.
AlkoshaДата: Понедельник, 03 Ноября 2014, 15:13 | Сообщение # 108 | Тема: Партиклы
участник
Сейчас нет на сайте
спасибо за подсказку. В принципе, я так с самого начала и предполагал, но думал, что есть более оптимальный подход. Так как придётся каждый раз в холостую проходиться по циклу, даже если все партиклы давно потухли (так как присутствуют i-тые элементы в условии).
А может можно сделать какой-то флаг, определяющий что абсолютно все частицы вымерли ?
AlkoshaДата: Понедельник, 10 Ноября 2014, 09:50 | Сообщение # 109 | Тема: Движок Irrlicht
участник
Сейчас нет на сайте
Цитата Snake174 ()
По идеи должен )


В BSP-локациях он вроде бы отсекает (так как алгоритм BSP это как раз в первую очередь предусматривает).
А вот на счёт загруженных в ноды моделек я не уверен.

Добавлено (28.10.2014, 09:05)
---------------------------------------------

Цитата Snake174 ()
Автор скорей всего уже 10 раз разобрался с этим )


Или попросту забил на это гиблое дело и ушёл в запой.

Добавлено (10.11.2014, 08:21)
---------------------------------------------
А пробовал кто-нибудь версию 1.8 под виндой скомпилить на mingw gcc ?

Чего-то у меня фатал эррор происходит даже при инициализации видео-драйвера. (с версией 1.7.2 всё нормально).

Windows 7 х86
Кодблокс 13.12 (mingw качал тоже последнюю версию).

Добавлено (10.11.2014, 09:50)
---------------------------------------------
Вроде даже когда-то пробовал перекомпилировать движок.
Но всё равно такая фигня происходила.

AlkoshaДата: Понедельник, 10 Ноября 2014, 18:40 | Сообщение # 110 | Тема: Движок Irrlicht
участник
Сейчас нет на сайте
Цитата stalker5889 ()
долго парился подгоняя разные irrlicht.dll


Ах да... точноо.. Длл... cool

Её-то я забыл подменить. Лежала со старой версии.

Но теперь когда положил соответствующую длл, выдаёт такое.



Теперь тут что-то с компоновщиком не то, видать.
AlkoshaДата: Вторник, 11 Ноября 2014, 11:56 | Сообщение # 111 | Тема: Движок Irrlicht
участник
Сейчас нет на сайте
Цитата Kwant ()
какой именно нужен то?


Оптимальный по производительности.

А вообще, это я потом посмотрю. Для начала хотелось бы понять, чего происходит с этим 1.8

Ключ "-static" (статическая линковка) не помогает.
AlkoshaДата: Пятница, 14 Ноября 2014, 19:08 | Сообщение # 112 | Тема: Unity-shader to GLSL
участник
Сейчас нет на сайте
Хочу этот шейдер в GLSL виде.

SuperFX диззеринг пикселей

С синтаксисом шейдеров юнити (и не только) не знаком.
AlkoshaДата: Суббота, 15 Ноября 2014, 18:38 | Сообщение # 113 | Тема: Unity-shader to GLSL
участник
Сейчас нет на сайте
Цитата Archido ()
Почему кто-то за тебя это должен сделать?


Не знаю cry


Сообщение отредактировал Alkosha - Суббота, 15 Ноября 2014, 18:39
AlkoshaДата: Вторник, 18 Ноября 2014, 23:06 | Сообщение # 114 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
как извлечь символ из строки string ?
Так не получается
print1.display(input[0][i]);

error: invalid conversion from 'char' to 'char*' [-fpermissive]|

В функцию print1.display() должен передаваться char*.

Можно весь стринг передать, а не посимвольно. Но нужно его сконвертить в char*

Добавлено (18.11.2014, 23:06)
---------------------------------------------
Ой... даже не так...
Считываю из файла таким образом.

Код

void readfile()
{
ifstream file;

int i=0;

  file.open("maps", ios::in);
         if (file)
             {
                 while (!file.eof())
                     {
                         file>>input[i];
                         i++;
                     }
                 file.close();
             }
}



Сперва думал, что разобьёт по отдельным стрингам строки файла (после каждого /n)... но теперь мне кажется, что разобъётся всё по словам, после каждого пробела.


Сообщение отредактировал Alkosha - Вторник, 18 Ноября 2014, 23:00
AlkoshaДата: Среда, 19 Ноября 2014, 22:03 | Сообщение # 115 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
Цитата goldsphere ()
так и есть. Если нужно вывести всю строку, считанную из файла, можно сделать так


ну вообще хочу сделать систему диалогов.
Диалоги хранятся в файле.
Каждая реплика отделяется ключевым словом (допустим "next").
И при считывании из файла, нужно каждую реплику расфасовать по отдельным строковым массивам , типа char* (или string, если заюзать c_str()), для последующего вывода.

Добавлено (19 ноября 2014, 18:12)
---------------------------------------------
В диалогах будет присутствовать символ \n, разумеется.

Добавлено (19 ноября 2014, 22:03)
---------------------------------------------

Цитата goldsphere ()
а потом print1.display(input.c_str());


Што за?

Цитата
E:\TURBO\platform3\main.cpp|974|error: invalid conversion from 'const char*' to 'char*' [-fpermissive]|


Не нравится ему, что константное значение.


Сообщение отредактировал Alkosha - Среда, 19 Ноября 2014, 21:48
AlkoshaДата: Четверг, 20 Ноября 2014, 19:36 | Сообщение # 116 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
Цитата froex ()
void display(const char* src);


Спасибо, сразу полегчало...

но теперь какая-то фигня с кодировками.
Латиница правильно отображается, а кириллица - нет. Фонты TTF содержат в себе русскоязычный алфавит.
Пробовал файл сохранить в UTF8 и в ANSI - всё равно кракозябры, только в разной кодировке по-своему.
Файл редактирую через notepad++
Если выводить буквы непосредственно из программы [print1.display("Аллаху акбар")] , то с кодировкой проблем нет.
AlkoshaДата: Четверг, 20 Ноября 2014, 21:58 | Сообщение # 117 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
Цитата froex ()
Отображается где? На какой платформе?
Если вывод в консоль, то можно использовать несколько вариантов:


Не дос, не консоль, а SDL2 под windows
Код
textSurface=TTF_RenderText_Solid(fnt,text,color);
         texxture=SDL_CreateTextureFromSurface(renderer,textSurface);
         SDL_RenderCopy(renderer, texxture,  NULL, &Dest);

Где переменная text - та самая const char*.
AlkoshaДата: Пятница, 21 Ноября 2014, 18:38 | Сообщение # 118 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
Цитата froex ()
после чего используешь функцию, которая переведёт в char*


Похоже, что такая функция есть в вижуал студии и борландовском билдере.
Я же использую кодблокс mingw gcc
AlkoshaДата: Воскресенье, 23 Ноября 2014, 22:46 | Сообщение # 119 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
wacko .....всё равно не понятно..... wacko

считываю не посимольно, а построково.
Код
     while (!file.eof())
                     {
                         getline(file, input[i]);
                         i++;
                     }
                 file.close();

Но функция getline не работает с wstring, только string.
AlkoshaДата: Понедельник, 24 Ноября 2014, 21:12 | Сообщение # 120 | Тема: Вопрос-Ответ (C++)
участник
Сейчас нет на сайте
Вроде бы сделал как тута: http://littletechnibbles.com/2009....ng-in-c

Результат всё тот же -> каракули вместо символов.

Код

string conv (const wstring& wstr)
{
    return (string(wstr.begin(), wstr.end()));
}
...
wfstream file;
int i=0;

  file.open("maps//dialog.dlg", ios::in);
         if (file)
             {
                 while (!file.eof())
                     {
                         getline(file, input[i]);
                         i++;
                     }
                 file.close();
             }
...
string lin=conv(input[0]);
print1.display(lin.c_str(),80,50,w*25,18,200,200,200);
...
Поиск:

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