![]() |
Re: Blitz3D engine
Аффтар жжошь, давай есчо!
ЗЫж под впечатлением этой статейки:http://boolean.name/showthread.php?p=60767#post60767 |
Re: Blitz3D engine
2H@NON хех=))
сорри, поправления к посту №75... вот еще и текст=))) #include "Blitz3D.h" B3DImage taverna; B3DImage pricel; B3DText texts; void main(int argc, char *argv[]) { InitBlitz3DDevice(argc, argv); Graphics3D(1024, 768, 32, 0); AppTitle("Blitz3D engine by ~XenuS~"); taverna.LoadImage("image.bmp"); pricel.LoadImage("pric.bmp"); texts.LoadFont("Comic Sans MS",30,15,0,0,0); StartMainBlitzLoop(); } void MainBlitzLoop() { RenderWorld(); taverna.DrawImage(0,0); pricel.DrawImage(712,384); Color(255,255,0); texts.Text(100,50,"Это демонстрация Blitz3D engine by ~XenuS~"); Flip(); } void KeyboardEvent(unsigned char key, int x, int y) { if (KeyDown(key,B3D_ESC)) End(); } void MouseEvent(int button, int x, int y, int scale) { } заметьте, текст поддерживает русский в любом случае...=) |
Re: Blitz3D engine
XenuS
почему нельзя определить функцию B3DImage * LoadImage(B3D_string * file_name); ? в добавок хочется определенный конструктор типа чтобы можно было вот так писать : B3DImage * img = new B3DImage("image1.bmp"); убери наконец то StartMainBlitzLoop(); и прочий бред в блице самое важное было ПРОЦЕДУРНОЕ программирование так что давай делай функции типа DrawImage и тд имхо лутче зделай как в BlitzMax - все функции в классах но есть простые процедурные реализации типа : Код:
class foo да кстати хотелось бы видеть хоть какое то подобие управления памяти хотя бы как в Irrlicht в добавок еще нужно переопределить ВСЕ типы переменных, для кроссплатформности ну типа #define B3D_Int int и тд потом весь платформнозависимый код (а его надо точно определить) вынести в отдельные блоки попробуй хотя бы скомпилировать ето чудо на MinGW поймеш что MSVC6 далек от стандартов и нифига просто так не будет компилится и еще хочется какой нибудь но фреймворк классы типа B3D_String и прочее |
Re: Blitz3D engine
ок, насчет процедурного программирования, я попробую исправить...так реально будет красивее и код и более похож на блиц...
переопределение типов(базовых) уже есть=)) класс B3DString есть....но его я сделал для удобства работы со строками...сложить, = и т.п. но из него получаешь указатель на текст...и работаешь как с простым массивом char... например: B3DString str; str="Это "; str+="строка"; cout << str.getPointer(); прост я это не показывал=) а зачем управление памяти, как в иррлихт? я стараюсь сделать двиг, который будет элементарно выучить, не углубляясь в само программирование...(в блице3Д именно так).... так, тогда в уже следующем моем посте относительно движка, я постараюсь выложить процедурный код... |
Re: Blitz3D engine
XenuS
когда память потечет узнаеш зачем управление памятью ;) |
Re: Blitz3D engine
ааа.....ты про это=)))
не, у мня для каждого объекта есть метод Delete... вот когда надо, тогда кодер и будет удалять=))) |
Re: Blitz3D engine
XenuS, а такой варриант:
Энтити1=ЗагрузитьМешь(...) Энтити1=ЗагрузитьМешь(...) То первый останеться, а что делать с ним? Его уже ни как не тронешь, тока пиком получить - извращенство. Поэтому такое нада удалить. Или пропала линка на объект - удаляем, поэтому юзер всегда будет уверен что потерянное будет удалено. |
Re: Blitz3D engine
оо, я еще демку не выложил, а вы уже баги нашли=)))спс)
ну в таком случае я сделаю так: ...... int B3DMesh::loadMesh(char *f) { ..... //model - указатель на модель if (model!=NULL) delete []model; ..... } ...... как нибудь так...сейчас буду это вписывать в 2Д изображения=) |
Re: Blitz3D engine
XenuS
хм, ты вообще работал с указателями, ссылками, обьектами и статическими елементами ? понимаеш о чем я говорю ? в новосозданом обьекте model в любом случае у тебя == NULL ну и как же ты будеш проверять что УКАЗАТЕЛЬ затерся ? для примера Код:
foo * a1; определи что тут указатель затерся ... ;) ps. можно узнать сколько ты программируеш на C++ ? и вообще с чем работал и что писал ? ps2. сверх сложно перенести стиль blitz на c++ не ограничивая возможностей ООП |
Re: Blitz3D engine
C++ я знаю 2 года....вот учусь ему=)
нет, ты мня не понял, я имел ввиду так: первая модель загрузилась...значит то, во что она загрузилась, стало равно не NULL...а перед загрузкой пишем: если то, во что она должна загрузиться != NULL, тогда удаляем это.... ЗЫ а работал я с паскалем, вижуал басиком, блицом....вот С++ теперь(я ему учусь в инс-те)....а что? =) ЗЫ2 я и не хочу полностью переносить стиль блица, у меня будут классы и все, что связано с ООП, но идея в том, что бы были функции\методы блица...не надо писать инициализацию окна, можно написать Graphics3D...не надо писать полностью код просмотра директории, можно написать: B3DDirectory dir("C:/"); dir.ReadDir(); cout << dir.firstFile() << endl; for (int i=0;i<dir.getCountOfFiles();) { char *k; k=new char[255]; k=dir.nextFile(); cout << k; cout << endl; delete []k; } dir.CloseDir(); } вот так=))) |
Re: Blitz3D engine
XenuS
эм, мы друг друга не понимаем :) я просто говорю что ето не катит ты предпологаеш что юзер выполнит такой код : Код:
B3DImage img1; а я предпологаю что юзер выполнит такой код : Код:
B3DImage * img = new B3DImage; в принципе НИКТО не пишет такие вещи прямо обьектами обычно все такие обьекты хранятся в связаном списке можно для начала добавить менеджер по принципу reference counting тоесть есть начальный класс от которого все наследуется потом если обьект где либо используется (на него есть ссылка) то reference = 1, если обьект используется еще где-то то reference = сколько обьектов юзает етот обьект когда какому либо обьекту наш обьект не нужен то его reference уменьшается на 1 когда какому либо обьекту наш обьект понадобился то соответственно reference ++ когда reference достигает 0 - обьект само удаляется в принципе реализация гарантирует, при прямых руках, отсутствие утечек памяти, но руки реально нужны прямые :) в принципе вот пример такого базового класса из того же irrlicht Код:
class IUnknown очистится все что выделял движок для етого не плохо бы зделать свой менеджер памяти, который бы выделял бы память ps. я даю советы, потому что не одну шишку набил на етих проблемах реально если неправильно зделать базовую архитектуру, то потом все 400 кб кода прийдется тупо удалять .... я один и тот же проект 3 раза переписывал, только из-за того что не правильно делал менеджемент памяти а теперь я пишу код который выдерживает самые жосткие проверки типа Код:
while 1 |
Re: Blitz3D engine
ппц, ну я так и не получил ответа, зачем нам еще один движек похожий синтаксисом на Блиц?
|
Re: Blitz3D engine
аааа, все, понял=))) ок, сейчас я буду переделывать структуру создания окна в процедурный и т.д., вот и это переделаю...
ЗЫ: главное, что я въехал сейчас, когда там не так много в двиге написано, а то потом все переделывать - это пипец! +) затем, что это будет двиг под С++!!! обычный двиг использует в основном ООП, а тут можно будет как процедурно, так и ООП.... и в 3-х, мне хочется сделать такой двиг....я думаю, что этого достаточно для того, чтобы сесть и написать его, хотя бы в свое удовольствие... |
Re: Blitz3D engine
Цитата:
![]() |
Re: Blitz3D engine
Вообще я обеими руками за ООП. Но процедурное программирование проще, что уж тут говорить. Я бы сказал процедурное для новичков. И раз тебе так хочется, то и вопросов нет. Пиши! Главное чтоб не перегорел.
ЗЫ. Мне б стока энтузазизма скока у тебя - я б тоже нечто подобное писал ;) |
Часовой пояс GMT +4, время: 10:18. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot