GameDev.ru
/ GameDev.ru / Пользователи / Andrey / Сообщения на форуме пользователя Andrey (188 стр.)

Сообщения на форуме пользователя Andrey (188 стр.)

Сокеты WinSock220 мар. 200611:47#3
Cracked Mind
Спасибо!!! неплохой документик :)
Как лучше организовать таймер?20 мар. 200611:24#0
Привет всем!!
У нас возник спор по поводу релизации работы с таймерами в игре. Предложены 2 версии. Прошу вас оценить их и посоветовать какую версию использовать лучше.
Версия первая:
1) class Timer {
public:
//Текущее время
unsigned last_tick;
unsigned elapse;
bool Check()
{
unsigned cur_time = timeGetTime();
if (cur_time - last_tick > elapse) { //тут проверяется пройденное время, сам cам таймер рестартуется.
last_tick  = cur_time;
}

};
};

Версия вторая:
2)
class Timer {
public:
	virtual void OnTimer(unsigned id) = 0;
	unsigned CreateTimer(unsigned elapse)
		{ return timer_processor->CreateTimer(this, elapse); }
	~Timer()
		{ timer_processor->KillTimer(this); }
private:
	static TimerProcessor *timer_processor;
	friend class TimerProcessor;
};

class TimerProcessor {
public:
	TimerProcessor();
	unsigned CreateTimer(Timer*,unsigned);
	void KillTimer(Timer*);
	void KillTimer(unsigned);
	void Check();
private:
	unsigned counter;

	struct TimerStruct {
		unsigned ID;
		Timer  *tm;
		unsigned elapse;
		unsigned last_tick;
	};
	std::vector <TimerStruct> timers;
};

TimerProcessor::TimerProcessor()
{
	Timer::timer_processor = this;
	counter = 0;
}

unsigned TimerProcessor::CreateTimer(Timer *t,unsigned elapse)
{
	TimerStruct ts = {counter++, t, elapse, timeGetTime() };
	timers.push_back(ts);
	return counter;
}

void TimerProcessor::KillTimer(Timer *t)
{
	for (std::vector<TimerStruct>::iterator iter = timers.begin(); iter != timers.end(); iter++)
		if ( (*iter).tm == t)
			timers.erase(iter);
}
void TimerProcessor::KillTimer(unsigned id)
{
	for (std::list <TimerStruct>::iterator iter = timers.begin(); iter != timers.end(); iter++)
		if ( (*iter).ID == id)
		{
			timers.erase(iter);
			break;
		}
}
void TimerProcessor::Check()
{
	unsigned cur_time = timeGetTime();

	for (std::list <TimerStruct>::iterator iter = timers.begin(); iter != timers.end(); iter++)
		if ((*iter).last_tick + (*iter).elapse < cur_time)
		{
			(*iter).last_tick = cur_time;
			(*iter).tm->OnTimer((*iter).ID);
		}
}
//игровой объект
class GameObject : public  Timer {
...
//переопределяем виртуальную функцию
virtual void OnTimer(unsigned id)
{
...
//нужен если много таймеров у одного объекта
switch (id) {
//и делаем  то что нужно по истечении времени
};
};
...
};
использования 1 версии:
TimerProcessor timerProcessor;

//вызываем проверку таймеров в главном цикле.
timerProcessor.Check()
использования 2 версии:
//игровой объект
class GameObject {
Timer timer;
...
virtual void Update(...) //вызывавем в главном цикле
{
if (timer.Check()) {
//вот тут делаем то что нужно по истечении времени
}
};
Прошу оценить обе реализации по следующим критериям:
1) скорость выполнения;
2) простота и наглядность использования;
3) универсальность.

Правка: 20 мар. 2006 14:48

Не могу понять fwrite.15 мар. 200617:01#37
Димка
>fopen() неудобен двумя вещами:
>1. Отсутствие корректной обработки неправильных аргументов
ferror не пойдет? неправильные аргументы это второй параметр типа "r", "w" "rb", "wb"...?
>2. Геморрой с выяснением причины возврата NULL-pointer и последующего анализа глобальной переменной errno.
мне кажеться это мелочи достаточно написать свой класс обернуть в него все операции с FILE * и все...
Короче я так понял тут дело вкуса...
Не могу понять fwrite.15 мар. 200616:27#33
const
fycom
Ребят давайте жить дружно :)
ANSI C более 30 лет используется в том числе и fopen и будет минимум еще столько использоваться
дак зачем всякое придумали типа errno_t и все фнункции ANSI С  + "_s" ?

Tokamak в DX - Помогите Плиз!!!15 мар. 200613:28#6
-=frame=-
нсли матрица твой тип то прреобразовать надо указатель.
попробуцй так:
IDirect3DDeviceN::SetTransform(D3DTS_WORLD, reinterpret_cast< D3DXMATRIX *>(&твоя_матрица));
Не могу понять fwrite.14 мар. 200619:27#18
SimpleProger
>Переполнения, в книге "Защищенный код" приводится список того что нельзя просто так вызывать из стандартной библы,
>функции из string.h там тоже есть.
Книга видать интересная... а что за переполнение?
ferror же есть можно проверять что возвратили эти функции...  ни разу проблем не было...
Не могу понять fwrite.14 мар. 200617:51#16
const
>То что майкрософт считает их депрекейтнутыми - ничего еще не значит. Тем более, что их всего лишь попробовали сделать >более безопасными.
можн поподробнее в чем их опасность?
Не могу понять fwrite.14 мар. 200614:25#13
Feo#1
>fwrite - устаревшая функция
это что за бред???? :)))) это ANSI C
std::fstream/ofstream ее вызывают полюбому
Я изменяю матрицу а получаеться не мешь перемещаеться а камера?14 мар. 200611:49#5
Keysall
Привет!
ты мне как-то помогал :)
Intel C++ 8.1 надо?
Я изменяю матрицу а получаеться не мешь перемещаеться а камера?14 мар. 200611:32#3
stim24
тогда делай так:
D3DXMATRIX MatView;
 	D3DXMATRIX Mat;
 	D3DXMATRIX MatWorld;
	//перемещение на вектор
	D3DXMatrixTranslation(&Mat, x, y, z);	//тут просто перемещаем мешь
	//получаем матрицу вида
    pDevice -> GetTransform(D3DTS_VIEW, &MatView);
    //перемножаем
    D3DXMatrixMultiply(&MatWorld, &Mat, &MatView);
//результирующая матрица для меша
    pDevice -> SetTransform(D3DTS_WORLD, &MatWorld);
Я изменяю матрицу а получаеться не мешь перемещаеться а камера?14 мар. 200610:04#1
stim24
может надо D3DTS_VIEW вместо D3DTS_WORLD ?
Какой компайлер выбрать?13 мар. 200613:25#81
Keysall
>Winnie , подскажи кстати где можно
>Intel C++ качнуть ?
>пасиб...
могу на почту закинуть :)
C++ Builder полное убожество :)
борльше говорить нечего я охренел  от 29 поста то что написал Executor

Вылетает LuaBind13 мар. 200611:21#17
Mordoproglot
>Но вот что интересно - у меня все пашет (притом правильно), если в луа- файле нет ошибок. А когда они появляются - прога >вылетает на lua_dofile. Может дело в каких-то настройках проекта ?
врядли тут настройки проекта у меня тоже такое былопри ошибке в скрипте падает проект, но я не использовал lua_dofile
я делал обмен данными C/C++ -> Lua скрипт / Lua скрипт -> C/C++.
Выложи код скрипта, может специалисты по языку Lua подскажут. Моэет ты там сильно с таблицами замутил?
Если не можешь понять где ошибка, методом исключения найди то место где вылетает и разберись с этим.
Вылетает LuaBind11 мар. 200616:03#14
Mordoproglot
что внутри LuaScript1.lua ?
>>mLuaState == NULL? или там вообще мусор?
>нет, там все ок - это точно !
1) lua_open() вызывал?
2) ты бибилиотеки Lua API загружал?
3) посмотри еще мою тему:
http://www.gamedev.ru/forum/?group=0&topic=21779
там много ритмеров кода
4) выложи полный код тогда снанет понятно что нетак.

Правка: 11 мар. 2006 16:04

Следующие темы >>

2001—2012 © GameDev.ru — Разработка игр