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

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

Проблемы с обменом значений между C/C++ и Lua.12 янв. 20061:03#28
Timm
да luabind я уже выкачал надо пробовать...
>А самому мучиться не надо, Lua это очень обкуренная система (португальцы сделали), всё на С - трудно отследить связи и
>за стеком постоянно следить, ужас.
ну тут проверку стека сделать можно...
>Даже при наличии подробной документации - http://www.lua.org/pil/ постоянно экспериментируешь методом случайного >тыка для реализации примитивной вещи.
да ты тут прав...
Прога не запускается без DX9 SDK12 янв. 20061:01#15
Careless Angel
>не может быть в принципе, в Dec2004 а не Dec2005 dll нет в принципе, все линкуется статически
ой блин это я что-то стормозил!! :)
если DirectX 9.0 SDK без обновлений то все ок без dll работает...
Прога не запускается без DX9 SDK11 янв. 200621:58#13
GoS
Careless Angel
>Можно....компилировать на DX SDK не новее чем за декабрь 2004 (!)
нет у меня не пахает требует *.dll
Проблемы с обменом значений между C/C++ и Lua.11 янв. 200616:15#26
Sneer
ой спасибо тебе большое скопировал я страницу с сылкой на форум, посмотрю потом еще спрошу...
Прога не запускается без DX9 SDK11 янв. 20061:19#9
Osiris
ой я на твою тему и не обратил внимание!! говорю же позвони мне!!!
скинь исходники посмотрю...
повторю что в аське говорил
1) d3dx9_28.dll  есть в каталоге установки?
2) DirectX 9.0c должен быть< запусти dxdiag на тех компах на которых не работает и точно узнай какой именно DirectX там стоит.
я в аську скинул тебе совой домашний телефон(а твой забыл :( ) позвони...
Применение boost в программировании игр10 янв. 200614:56#50
All
Ну ничего себе... :)
короче сколько людей столько мнений...
Проблемы с обменом значений между C/C++ и Lua.10 янв. 200614:35#24
Kashey
Спасибо за дополнительный вопрос :)
Qiller
а тебе за ответ :)
Sneer
Спасибо за все!!!
вот еще 1 момент я тут освоил основы...
т.е. сейчас я умею передавать и получать значения нескольких переменных. Сделал тестовфый проект где окружность двигается по 2 измененным координатам. координаты меняются в скрипте по заданному закону
sin(os.clock())
теперь вопрос сложней. Как вообще реализовать логику на скриптах и привязать к игровым объектам?
вопрос 1
lua_State - для каждого объекта отдельно или можно все через 1 состояние сделать?
вопрос 2
для каждого объекта есть скрипт который меняет его состояние и сдедит за логикой игры
я так понимаю мы просто в скрипте работаем через несколько функций(в зависимости от сложности) и меняем данные игрового объекта в главном цикле движка
идея правильная?
вопрос 3 если можно обойтись 1 lua_State можно ли для каждого объекта выбрать загруженный скпипт и вызывать из нгего функции меняющие состояния игрового объекта?
Применение boost в программировании игр9 янв. 200622:41#27
Gbp
>for(it = array1.begin(); it != array1.end(); it++)
>Судя по этому, очень плохо читал!
ну что я на это скажу тот тест я написал, я делал в 3 часа ночи. поэтому не учел постоянный вызов  array1.end();  и array1.begin()  :)
Применение boost в программировании игр9 янв. 200621:34#25
Gbp
читал, но на скорость не обратил внимание. но все равно я сомневаюсь в скорости.
Применение boost в программировании игр9 янв. 200616:48#20
JokerR
Fuzzy
отдельно сомпилировать и протестить 2 цикла попробовал?
CyberZX
>как говорится, найдите десять отличий
мне кажеться их нет, кроме разных регистров и значений адресов
я сильно в assembler'е не силен
но мне кажеться
эти команды по скорости не будут различаться, но я могу ошибиться т.к. второй операнд индекстный регистр и регистор аккамулятор:
mov        dword ptr [eax],edi

mov        dword ptr [ecx],eax

итак STL не медленнее обычных массивов?

Применение boost в программировании игр9 янв. 20063:51#16
ArT
>А ты тестил Debug или Release?
конечно Release в Debug std::vector по определениею в 10 раз медленнее....
>Приведи код теста.
Итак вот обшая программа теста, подойдет под любой компилятор т.к. код ANSI C/C++(кроме макроса _MSC_VER):
#include <vector>
#include <ctime>
using namespace std;

int main(int argc, char* argv[])
{

	vector<int> array1;
	int* array2;

	enum {SIZE = 27000000};
	array1.resize(SIZE);
	array2 = new int[SIZE];
	int value = 6;
	fprintf(stderr, "%s%d%s", "Visual C++ version: ", _MSC_VER, "\n");
#ifdef _DEBUG
	fprintf(stderr, "%s", "Debug version\n");
#else
	fprintf(stderr, "%s", "Release version\n");
#endif
	vector<int>::iterator it;
	unsigned int i = 0;
	clock_t t = 0;
	float k = 1.0f / static_cast<float>(CLOCKS_PER_SEC);

	fprintf(stderr, "%s", "std::vector<int> test, press enter key\n");
	getchar();

	t = clock();
	for(i = 0; i < SIZE; i++)
		array1[i] = value;
	fprintf(stderr, "%s%f%s", "std::vector<int> time: ", (clock() - t) * k, "\n");

	fprintf(stderr, "%s", "int* test, press enter key\n");
	getchar();

	t = clock();
	for(i = 0; i < SIZE; i++)
		array2[i] = value;
	fprintf(stderr, "%s%f%s", "int* time: ", (clock() - t) * k, "\n");

	fprintf(stderr, "%s", "std::vector<int>::iterator test, press enter key\n");
	getchar();

	t = clock();
	for(it = array1.begin(); it != array1.end(); it++)
		*it = value;
	fprintf(stderr, "%s%f%s", "std::vector<int>::iterator time: ", (clock() - t) * k, "\n");

	delete [] array2;
	fprintf(stderr, "%s", "End test, press enter key\n");
	getchar();
	return 0;
}
Я все тестировал отдельно т.к. это будут более равные условия если гонять 3 цикла в одной программе результатыт будут отличаться...время можно перемерять высокоточным Win32 таймером...
вот как я тестировал по отдельности
1) Простой массив:
//убрать
array1.resize(SIZE);
//оставить только этот цикл:
fprintf(stderr, "%s", "int* test, press enter key\n");
	getchar();

	t = clock();
	for(i = 0; i < SIZE; i++)
		array2[i] = value;
	fprintf(stderr, "%s%f%s", "int* time: ", (clock() - t) * k, "\n");
2) std::vector доступ по индексу (operator [])
//убрать
int *array2;
//убрать
array2 = new int[SIZE];
//убрать
delete [] array2;
//оставить только этот цикл:
fprintf(stderr, "%s", "std::vector<int> test, press enter key\n");
	getchar();

	t = clock();
	for(i = 0; i < SIZE; i++)
		array1[i] = value;
	fprintf(stderr, "%s%f%s", "std::vector<int> time: ", (clock() - t) * k, "\n");
3) std::vector доступ по итераторам
//убрать
int *array2;
//убрать
array2 = new int[SIZE];
//убрать
delete [] array2;
//оставить только этот цикл:
fprintf(stderr, "%s", "std::vector<int>::iterator test, press enter key\n");
	getchar();

	t = clock();
	for(it = array1.begin(); it != array1.end(); it++)
		*it = value;
	fprintf(stderr, "%s%f%s", "std::vector<int>::iterator time: ", (clock() - t) * k, "\n");
Если все 3 цикла гонять в 1 программе результаты могут быть не верны.
итак вот результаты:

Visual C++ .Net 2003:

Visual C++ version: 1310
Release version
int* test, press enter key

int* time: 0.157000
End test, press enter key

Visual C++ version: 1310
Release version
std::vector<int> test, press enter key

std::vector<int> time: 0.141000
End test, press enter key

Visual C++ version: 1310
Release version
std::vector<int>::iterator test, press enter key

std::vector<int>::iterator time: 0.172000
End test, press enter key

Процессор AMD Athlon(tm) XP 2500+

Конечно если поиграться размером массива то могут результаты измениться...

Применение boost в программировании игр8 янв. 200621:50#9
JokerR
>а можно поподробней?
ну смотри:
vector<int>  array1;
int *array2;
скорость обращения array1[index] и array2[index] будеть отличаться в пользу array1, т.к. возможно компилятор не подставит
vector::operator [] в код, а будет вызываться метод класса. На больших массивах будет это может сказыаться на скорости.
Насчет итераторов STL ситуация возможно будет такая-же. простой массив есть простой массив. STL безусловно удобна но в real time я отказался от нее.
Nick Chirkov
>STL даёт большую скорость написания кода, а про скорость выполнения рекомендую читать страуструпа.
Нука подскажи эту страничку.
я сделал тест: 2 массива пару миллионов элементов. Один std::vector другой простой массив.
замерял время перед цикломи(2 цикла для 2 тестовых массивов) и после, где я просто в массивы записывал значения. Для Visual C++ 6.0 скорость заметно отличалась. В Visual C++ .Net 2003 ситуация улучшилась, но все рано быстрей работал обычный массив.Я возможно ошибаюсь.
Juster~
вообще навеорное буду использовать boost::luabind
Применение boost в программировании игр8 янв. 20064:38#3
jaguard
>Мне вот удобно писать игры со статическими указателями, без применения stl(совсем), без применения буста(тем более >совсем),
согласен :) STL в real time уже дает малуюскорость...
>с минимумом классов но с большим количеством глобальных переменных и указателей, с единым неймспейсом.
не согласен :)
VC6, VC7 или VC2005?4 янв. 200620:40#37
All
интересную тему открыли как там насчет Win32 в Visual C++ .Net 2005?
слышал windows.h отсутствует?

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

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