Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 11.10.2007, 19:59   #76
H@NON
Дэвелопер
 
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений
(для 774 пользователей)
Re: Blitz3D engine

Аффтар жжошь, давай есчо!

ЗЫж под впечатлением этой статейки:http://boolean.name/showthread.php?p=60767#post60767
(Offline)
 
Ответить с цитированием
Старый 11.10.2007, 20:01   #77
XenuS
Нуждающийся
 
Регистрация: 31.07.2007
Сообщений: 89
Написано одно полезное сообщение
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)
{
}

заметьте, текст поддерживает русский в любом случае...=)
(Offline)
 
Ответить с цитированием
Старый 11.10.2007, 20:13   #78
jimon
 
Сообщений: n/a
Re: Blitz3D engine

XenuS
почему нельзя определить функцию
B3DImage * LoadImage(B3D_string * file_name); ?

в добавок хочется определенный конструктор
типа чтобы можно было вот так писать :
B3DImage * img = new B3DImage("image1.bmp");

убери наконец то StartMainBlitzLoop(); и прочий бред

в блице самое важное было ПРОЦЕДУРНОЕ программирование
так что давай делай функции типа DrawImage и тд
имхо лутче зделай как в BlitzMax - все функции в классах
но есть простые процедурные реализации

типа :
class foo
{
public:
foo(B3D_string * yo)
{
LoadImage(yo);
}

~foo(){}
void LoadImage();
};

B3DImage * LoadImage(B3D_string * string)
{
return New foo(string);
}
конешно маразм, но двиг у нас b3d like

да кстати хотелось бы видеть хоть какое то подобие управления памяти
хотя бы как в Irrlicht
в добавок еще нужно переопределить ВСЕ типы переменных,
для кроссплатформности

ну типа
#define B3D_Int int
и тд

потом весь платформнозависимый код (а его надо точно определить)
вынести в отдельные блоки

попробуй хотя бы скомпилировать ето чудо на MinGW
поймеш что MSVC6 далек от стандартов и нифига просто так не будет компилится

и еще хочется какой нибудь но фреймворк
классы типа B3D_String и прочее
 
Ответить с цитированием
Старый 11.10.2007, 20:42   #79
XenuS
Нуждающийся
 
Регистрация: 31.07.2007
Сообщений: 89
Написано одно полезное сообщение
Re: Blitz3D engine

ок, насчет процедурного программирования, я попробую исправить...так реально будет красивее и код и более похож на блиц...
переопределение типов(базовых) уже есть=))
класс B3DString есть....но его я сделал для удобства работы со строками...сложить, = и т.п. но из него получаешь указатель на текст...и работаешь как с простым массивом char...
например:
B3DString str;
str="Это ";
str+="строка";
cout << str.getPointer();
прост я это не показывал=)

а зачем управление памяти, как в иррлихт? я стараюсь сделать двиг, который будет элементарно выучить, не углубляясь в само программирование...(в блице3Д именно так)....

так, тогда в уже следующем моем посте относительно движка, я постараюсь выложить процедурный код...
(Offline)
 
Ответить с цитированием
Старый 11.10.2007, 20:47   #80
jimon
 
Сообщений: n/a
Re: Blitz3D engine

XenuS
когда память потечет узнаеш зачем управление памятью
 
Ответить с цитированием
Старый 11.10.2007, 20:55   #81
XenuS
Нуждающийся
 
Регистрация: 31.07.2007
Сообщений: 89
Написано одно полезное сообщение
Re: Blitz3D engine

ааа.....ты про это=)))
не, у мня для каждого объекта есть метод Delete...
вот когда надо, тогда кодер и будет удалять=)))
(Offline)
 
Ответить с цитированием
Старый 11.10.2007, 21:52   #82
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Blitz3D engine

XenuS, а такой варриант:

Энтити1=ЗагрузитьМешь(...)
Энтити1=ЗагрузитьМешь(...)

То первый останеться, а что делать с ним? Его уже ни как не тронешь, тока пиком получить - извращенство.
Поэтому такое нада удалить. Или пропала линка на объект - удаляем, поэтому юзер всегда будет уверен что потерянное будет удалено.
(Offline)
 
Ответить с цитированием
Старый 11.10.2007, 22:51   #83
XenuS
Нуждающийся
 
Регистрация: 31.07.2007
Сообщений: 89
Написано одно полезное сообщение
Re: Blitz3D engine

оо, я еще демку не выложил, а вы уже баги нашли=)))спс)
ну в таком случае я сделаю так:
......
int B3DMesh::loadMesh(char *f)
{
.....
//model - указатель на модель
if (model!=NULL)
delete []model;
.....
}
......

как нибудь так...сейчас буду это вписывать в 2Д изображения=)
(Offline)
 
Ответить с цитированием
Старый 11.10.2007, 23:12   #84
jimon
 
Сообщений: n/a
Re: Blitz3D engine

XenuS
хм, ты вообще работал с указателями, ссылками, обьектами и статическими елементами ?
понимаеш о чем я говорю ?

в новосозданом обьекте model в любом случае у тебя == NULL
ну и как же ты будеш проверять что УКАЗАТЕЛЬ затерся ?

для примера
foo * a1;
a1 = new foo;
a1 = new foo;
класс foo - любой
определи что тут указатель затерся ...

ps. можно узнать сколько ты программируеш на C++ ?
и вообще с чем работал и что писал ?

ps2. сверх сложно перенести стиль blitz на c++ не ограничивая возможностей ООП
 
Ответить с цитированием
Старый 11.10.2007, 23:57   #85
XenuS
Нуждающийся
 
Регистрация: 31.07.2007
Сообщений: 89
Написано одно полезное сообщение
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();
}
вот так=)))
(Offline)
 
Ответить с цитированием
Старый 12.10.2007, 00:18   #86
jimon
 
Сообщений: n/a
Re: Blitz3D engine

XenuS
эм, мы друг друга не понимаем
я просто говорю что ето не катит

ты предпологаеш что юзер выполнит такой код :
B3DImage img1;
img1.LoadImage("a1.bmp");
...
img1.LoadImage("a2.bmp");
тогда ты прав, и моделька очистится

а я предпологаю что юзер выполнит такой код :
B3DImage * img = new B3DImage;
img->LoadImage("a1.bmp");
...
img = new B3DImage; //тут затерся ойойой указатель на img :)
img->LoadImage("a2.bmp");
так что особой нужды в твоей проверке нету, но она нужна
в принципе НИКТО не пишет такие вещи прямо обьектами
обычно все такие обьекты хранятся в связаном списке

можно для начала добавить менеджер по принципу reference counting
тоесть есть начальный класс от которого все наследуется
потом если обьект где либо используется (на него есть ссылка)
то reference = 1, если обьект используется еще где-то
то reference = сколько обьектов юзает етот обьект

когда какому либо обьекту наш обьект не нужен
то его reference уменьшается на 1

когда какому либо обьекту наш обьект понадобился
то соответственно reference ++

когда reference достигает 0 - обьект само удаляется

в принципе реализация гарантирует, при прямых руках,
отсутствие утечек памяти, но руки реально нужны прямые

в принципе вот пример такого базового класса из того же irrlicht
	class IUnknown
	{
	public:

		IUnknown()
			: ReferenceCounter(1), DebugName(0)
		{
		}

		virtual ~IUnknown()
		{
		}

		void grab() { ++ReferenceCounter; }

		bool drop()
		{

			--ReferenceCounter;
			if (!ReferenceCounter)
			{
				delete this;
				return true;
			}

			return false;
		}


	private:

		s32	ReferenceCounter;
	};
просто надо гарантировать что при вызове "delete Engine;"
очистится все что выделял движок

для етого не плохо бы зделать свой менеджер памяти,
который бы выделял бы память

ps. я даю советы, потому что не одну шишку набил на етих проблемах
реально если неправильно зделать базовую архитектуру,
то потом все 400 кб кода прийдется тупо удалять ....
я один и тот же проект 3 раза переписывал,
только из-за того что не правильно делал менеджемент памяти

а теперь я пишу код который выдерживает самые жосткие проверки типа
while 1
Game = new Game
Game.Init()
Game.Update()
Game.Draw()
Game.Free()
Game = null
wend
и память не течет ... а твой проект так сможет ?
 
Ответить с цитированием
Старый 12.10.2007, 15:54   #87
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Re: Blitz3D engine

ппц, ну я так и не получил ответа, зачем нам еще один движек похожий синтаксисом на Блиц?
__________________
(Offline)
 
Ответить с цитированием
Старый 12.10.2007, 16:21   #88
XenuS
Нуждающийся
 
Регистрация: 31.07.2007
Сообщений: 89
Написано одно полезное сообщение
Re: Blitz3D engine

аааа, все, понял=))) ок, сейчас я буду переделывать структуру создания окна в процедурный и т.д., вот и это переделаю...
ЗЫ: главное, что я въехал сейчас, когда там не так много в двиге написано, а то потом все переделывать - это пипец! +)

затем, что это будет двиг под С++!!! обычный двиг использует в основном ООП, а тут можно будет как процедурно, так и ООП....
и в 3-х, мне хочется сделать такой двиг....я думаю, что этого достаточно для того, чтобы сесть и написать его, хотя бы в свое удовольствие...
(Offline)
 
Ответить с цитированием
Старый 12.10.2007, 16:45   #89
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Re: Blitz3D engine

что это будет двиг под С++!!!
То есть отдельного IDE мы не увидим? и придеццо писать все с с++ синтаксисом?
(Offline)
 
Ответить с цитированием
Старый 12.10.2007, 16:55   #90
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Re: Blitz3D engine

Вообще я обеими руками за ООП. Но процедурное программирование проще, что уж тут говорить. Я бы сказал процедурное для новичков. И раз тебе так хочется, то и вопросов нет. Пиши! Главное чтоб не перегорел.
ЗЫ. Мне б стока энтузазизма скока у тебя - я б тоже нечто подобное писал
__________________
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Engine win32 3D-программирование 14 01.08.2009 17:52
Illusion engine 2/5 D Черный крыс Проекты на BlitzMax 4 24.07.2009 23:06
Atlantis Engine Lost Проекты C++ 62 18.06.2009 05:00
Novartis Engine Genius Библиотеки 75 18.10.2008 02:28


Часовой пояс GMT +4, время: 02:17.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com