Автор Тема: какие программы использовать для создания своих игр?  (Прочитано 42217 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Неплохо было ещё откоментировать :
point E[3];
point O;
v1.x=E[0].x*x1.x+E[1].x*x1.y+E[2].x*x1.z;
просто кто-то плохо читает, что ему пишут
выбираешь 3 вектора i,j,k=(x,y) на плоскости экрана. И выбираешь точку O=(x,y) тоже на плоскости экрана.
после чего рисуешь модель основываясь на том что если нужно X=(x,y,z) спроецировать на экран, и P=(x,y) - проекция, то P=X.x*i+X.y*j+X.z*k.
Если всё ещё не понятно, то проведи соответствие E[0]=i, E[1]=j, E[2]=k, O=O. смайлег типа  :lol:
На самом деле всё просто как 2х2 (дважды два). i - это направление в котором движимся по x, j - направление y, k - направление z, и O - точка отсчёта. И всё это указывается в 2D.
« Последнее редактирование: 18 Август 2011, 01:00:59 от r57shell »

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1612
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
просто кто-то плохо читает, что ему пишут
Да нет, я просто ничего не понял там.
Если всё ещё не понятно, то проведи соответствие E[0]=i, E[1]=j, E[2]=k, O=O. смайлег типа  :lol:
На самом деле всё просто как 2х2 (дважды два). i - это направление в котором движимся по x, j - направление y, k - направление z, и O - точка отсчёта.
Будем разбираться.
Цитата
И всё это указывается в 2D.
А в чём преимущество если указывать в 3D.

-----------
Усилил эффект поворота. Может скоро и повернуть смогу! :)

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
вот пинок для старта :lol:
http://www.emu-land.net/forum/index.php/topic,39461.0.html
дальше разбирайся сам. например в доках по DirectX описано как всё работает. в OpenGL наверно тоже... не факт.

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1612
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Проанализировал код.Вот что выяснил:
//умножение на один даст то же число.Непонятно участие данной структуры.
point verts[]={
  {0, 0, 0},
  {0, 1, 0},
  {1, 1, 0},
  {1, 0, 0},
  {0, 0, 1},
  {0, 1, 1},
  {1, 1, 1},
  {1, 0, 1},
 };
 

//Не участвует в коде.
O.x=0;
O.y=0;

//Значения равны между собой v1.x == v2.x, v1.y == v2.y. Зачем?
v1.x= E[0].x * x1.x + E[1].x * x1.y + E[2].x * x1.z;
v1.y= E[0].y * x1.x + E[1].y * x1.y + E[2].y * x1.z;
v2.x= E[0].x * x2.x + E[1].x * x2.y + E[2].x * x2.z;
v2.y= E[0].y * x2.x + E[1].y * x2.y + E[2].y * x2.z;

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
вот тебе наглядный рисунок.
Большинство так в школах рисуют 3D объекты.
в системе координат экрана: x,y.
делаем вектора x,y,z которые разноцветные заисключением Z.
эти вектора задаются в 2D а позволяют рисовать в 3D.
основываясь на стандартных принципах ортогональных систем координат,
координата Z может получится если спроецировать вектор исходный (O) на ортогональное дополнение к Z, то есть на плоскость OXY,
вторая составляющая проекции (не помню как она называется, короче которая не проекция), и будет координата Z
аналогично X,Y,Z
координаты X,Y,Z обозначены как рёбра куба. Почему куб получается- потому, что не важно в каком порядке точку проэцировать, всё равно
получатся одинаковые координаты.
Я что и делаю. Мне нужно нарисовать O, я умножаю его X координату на вектор X, потом Y координату на вектор Y, и так далее. всё это суммирую - получаю точку на плоскости.
Xx - x координата X вектора, Xy - у координата X вектора, Yx - x координата Y вектора, Yy - y координата Y вектора...
E[0],E[1],E[2] в программе - в каком-то порядке X,Y,Z вектора, которые логично состоят из x,y координат. Лень было создавать структуру на x,y точки, так что воспользовался x,y,z структурой.

point verts[] - координаты вершин куба.
O.x, O.y - точка отсчёта. Да, забыл заюзать. К v1.x, v2.x надо прибавить O.x, v1.y,v2.y надо прибавить O.y

выше уже это описывал, читай внимательнее, тут даже видишь рисунок нарисовал.
увы я не художник такчто...
« Последнее редактирование: 24 Сентябрь 2011, 20:28:08 от r57shell »

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1612
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Я тут почитал, про изометрию. :blush:
Ты мне об этом пытался сказать?
Цитата
Основываясь на инженерном техническом черчении, изометрическое изображение представляет объекты без учета перспективы. Объекты базируются на решетке ромбовидной формы, как показано ниже.

« Последнее редактирование: 24 Сентябрь 2011, 21:39:13 от Mr2 »

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
не совсем, изометрия, это скорее аксонометрическая проекция.

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1612
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
не совсем, изометрия, это скорее аксонометрическая проекция.
Цитата
Изометри́ческая прое́кция — это разновидность аксонометрической проекции,
Что то ты меня совсем запутал. :?
Я хотел сделать вот так:
Имеем обзор XY, Z не видна(рисунок 1) видим соответственно одну сторону куба, поворачиваем его по горизонтали(рисунок 2)  и видим две стороны.
Ты предлогаешь как я понял изменить обзор и отобразить куб с учётом этого обзора(рисунок 3).То есть изменяем направления Z координаты, соответственно становятся видны другие стороны куба.Так?
« Последнее редактирование: 26 Сентябрь 2011, 02:55:23 от Mr2 »

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
не неси хрень. я ничего нигде не вращяю, я просто отображаю в соответствии с правилом: перемещение по x = перемещению по вектору X, аналогично остальные координаты.
код который выше я выкладывал позволяет проецировать 3D объекты в любую аксонометрическую проекцию, в том числе и в изометрию
для совсем тупых: дятел - разновидность птицы.
аналогично изометрия - разновидность аксонометрической проекции.

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1612
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
не неси хрень. я ничего нигде не вращяю, я просто отображаю в соответствии с правилом: перемещение по x = перемещению по вектору X, аналогично остальные координаты.
Я про то и говорю. Что ты не вращяешь, а меняешь угол обзора изменив направления Z оси(если раньше она была не видна то у тебя вполне видна), и при этом становятся видны другие стороны куба, как на третьем рисунке. Я же хотел повернуть куб и отобразить не меняя угла обзора(при котором Z координата не видна).Рисунок 1 исходное положение, 2 повёрнутый куб.
для совсем тупых: дятел - разновидность птицы.
аналогично изометрия - разновидность аксонометрической проекции.
Не логично:
Цитата
не совсем, изометрия, это скорее аксонометрическая проекция.
Не совсем, дятел, это скорее птица летающяя. :lol: :lol: :lol:
« Последнее редактирование: 26 Сентябрь 2011, 14:33:16 от Mr2 »

Оффлайн TrickZter

  • Пользователь
  • Сообщений: 142
  • I am the bone of my sword.
    • Просмотр профиля
Аксонометрические проекции - это хорошо, но только для плоских игр. В 3D-играх, если собираетесь делать именно 3D, всё несколько сложнее. При удалении от наблюдателя объект должен уменьшаться в масштабе и сдвигаться ближе к центру, и чем дальше находится объект, тем сильнее.

Классический пример - рельсы: они параллельны, но для наблюдателя, смотрящего вдоль них, рельсы кажутся сходящимися:




Почитать про проецирование трёхмерного пространства на экран можно, например, тут:
http://fvn2009.narod.ru/Manuscripts/schedule/schedule2.htm

или тут:
http://www.alexeyspace.ru/articles/1/
« Последнее редактирование: 26 Сентябрь 2011, 14:47:59 от TrickZter »

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Аксонометрические проекции - это хорошо, но только для плоских игр.
я не акцентирую, что надо её использовать. Мой, вроде, вменяемый ответ, в котором написано как делают нормальные люди вот тут.
просто я модифицировал код Mr2, где продемонстрировал самый, с моей точки зрения, "тупой" метод. Чтобы не взорвать мозг человеку.
Однако оказалось так, что даже эта простая как 2х2 модель взорвала ему мозг, т.к.

Я про то и говорю. Что ты не вращяешь, а меняешь угол обзора.
я не вращаю, и не меняю углы. я куб не трогаю. я меняю координатные оси.

Я же хотел повернуть куб и отобразить не меняя угла обзора(при котором Z координата не видна).
дак поверни куб. Домнож его на матрицу поворота.

Рисунок 1 исходное положение, 2 повёрнутый куб.
мне же достаточно заменить соответствующие строки вот этим:
E[0].x=15;
 E[0].y=0;
 E[1].x=0;
 E[1].y=30;
 E[2].x=-15;
 E[2].y=0;
и я получу вид 2.


Оффлайн Mr2

  • Пользователь
  • Сообщений: 1612
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Аксонометрические проекции - это хорошо, но только для плоских игр. В 3D-играх, если собираетесь делать именно 3D, всё несколько сложнее. При удалении от наблюдателя объект должен уменьшаться в масштабе и сдвигаться ближе к центру, и чем дальше находится объект, тем сильнее.
Спасибо за информацию, но это я знаю. :)
В смысле видел подобную инфу.Но как наверное вы уже поняли что сложновата она для рядового двоечника по математике. :)
Однако оказалось так, что даже эта простая как 2х2 модель взорвала ему мозг, т.к.
Не, просто  математику недавно учить начал.Поэтому туго доходит. :blush:

я не вращаю, и не меняю углы. я куб не трогаю. я меняю координатные оси.
Ну я про то и говорю. Просто куб отображается с учётом изменённых осей.
дак поверни куб. Домнож его на матрицу поворота.
Понял.
« Последнее редактирование: 28 Сентябрь 2011, 00:20:07 от Mr2 »

Оффлайн topos84

  • Emu-Land Team
  • Сообщений: 2762
  • Пол: Мужской
    • Просмотр профиля
Цитата: r57shell
для совсем тупых: дятел - разновидность птицы.
аналогично изометрия - разновидность аксонометрической проекции.
Изометрия - отображение одного метрического пространства в другое, сохраняющее метрику.
Здесь же изометрия - всего лишь сокращенное название изометрической проекции, одной из разновидностей аксонометрической проекции. Очевидно, что эта проекция расстояния не сохраняет (диагонали куба например имеют разные длины на рисунке), а потому настоящей изометрией не является.


Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Mr2, почитай про линейные операторы, и задающие их - матрицы (то есть все линейные операторы не надо курить, достаточно только операторы заданные матрицей). А затем если понять, что все: перемещение, перенос, вращение, масштабирование - это линейные операции, то можно понять что их можно записать матрицами, а композиция операций = композиции матриц. У матриц есть хорошее свойство - ассоциативность, после чего всё становится удобно. Во время внесения операции "перенос" должен стать вектор четырёхкомпонентный, и следовательно матрицы 4х4. И всё что остаётся сделать повернуть "всё" пространство "в анфас" к камере, так чтобы z было от камеры = в глубь сцены. И пусть эти координаты точек = (x,y,z,w). и окончательные координаты проекции это (x/z,y/z) которые остаётся правильно растянуть на экран. (fov, aspect).
по подробнее про перспектву тут: http://msdn.microsoft.com/en-us/library/windows/desktop/bb147302(v=vs.85).aspx
« Последнее редактирование: 28 Сентябрь 2011, 17:49:57 от r57shell »

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1612
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Проанализировал работу кода. :)
point E[3];//Векторы.
point O; // Начальная точка векторов.

//1 вершина совпадает с направлением вектора.
//0 вершина не совпадает с направлением вектора.
point verts[]={ //Вершины куба.
  {0, 0, 0},
  {0, 1, 0},
  {1, 1, 0},
  {1, 0, 0},
  {0, 0, 1},
  {0, 1, 1},
  {1, 1, 1},
  {1, 0, 1},
 };

int edges[]={//от какой вершины к какой идёт линия.(грани)
  0,1,
  1,2,
  2,3,
  3,0,
  4,5,
  5,6,
  6,7,
  7,0,
  0,4,
  1,5,
  2,6,
  3,7,
 };

 E[0].x=30;//Конечные точки векторов.(рисунок 1)
 E[0].y=0;
 E[1].x=0;
 E[1].y=30;
 E[2].x=20;
 E[2].y=10;

//вычисляем координаты вершин основываясь на направлении векторов.
v1.x= E[0].x * x1.x + E[1].x * x1.y + E[2].x * x1.z;
v1.y= E[0].y * x1.x + E[1].y * x1.y + E[2].y * x1.z;
Внимание вопрос:
Как мне записать новую точку над кубом относительно его центра?(рисунок 2)
point verts[]={ //Вершины куба.
  {0, 0, 0},
  {0, 1, 0},
  {1, 1, 0},
  {1, 0, 0},
  {0, 0, 1},
  {0, 1, 1},
  {1, 1, 1},
  {1, 0, 1},
  {?, ?, ? },
};

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
0.5 0.5 1.5
не знаю в каком порядке

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1612
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Начал изучать Win32 API, и вспомнил про это:
Простой пример WinAPI - почти весь основан на объектах. Таких как HRGN, HWND, HANDLE, и прочих, однако они все типа void *.

Как объект может быть типа void? Ведь объект и определяет свой тип.

А методы к ним это функции SetWindowRgn(hwnd,rgn) и прочее.

Методы так не вызываются.

Также на C пишется на принципах ооп. Если надо допустим делегирование, то просто добавляется свойство, с указателем на другой "объект" - который уже будет делегантом или как там я уже забыл.
В С++ не поддерживается делегирование на прямую. Как оно поддерживается в простом C?

И главный вопрос: Куда в Win api  писать "свой код" в win main функцию или в win proc?

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Как объект может быть типа void? Ведь объект и определяет свой тип.
без коментариев.

Методы так не вызываются.
class qwe
{
...
}
DoSomething(qwe *this, int param) - чем тебе это не метод.

В С++ не поддерживается делегирование на прямую. Как оно поддерживается в простом C?
Если так считать, то делегирования и методов не существует.
Доказательство:
1) Ассемблер не поддерживает делегирование и методы.
2) любой C, C++ код транслируется в код на ассемблере.
из (1), (2) следует что делегирование не возможно, т.к. его не поддерживает ассемблер.

найдите багу в доказательстве :].

И главный вопрос: Куда в Win api  писать "свой код" в win main функцию или в win proc?
в WinAPI не надо писать код.
Ты пишешь код который использует WinAPI.

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1612
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
без коментариев.
Про void* непонятно вопервых зачем, и как.
если мы объявляем указатель на структуру:
strucTest * one;
то мы работаем с данной структурой, а если мы объявляем void * one то с чем мы работаем в этом случае.
Читал что можно использовать указатель void*, но только с приведением его к конкретному типу.
Но не понял не пользы, не удобства.


class qwe
{
...
}
DoSomething(qwe *this, int param) - чем тебе это не метод.
Ты имеешь в виду что принцип работы функций со структурами аналогичен работе методов с классами?

Если так считать, то делегирования и методов не существует.
Доказательство:
1) Ассемблер не поддерживает делегирование и методы.
2) любой C, C++ код транслируется в код на ассемблере.
из (1), (2) следует что делегирование не возможно, т.к. его не поддерживает ассемблер.

найдите багу в доказательстве :].
Я не просил доказательств, я просил пример. Как делегирование поддерживается в простом C?

в WinAPI не надо писать код.
Ты пишешь код который использует WinAPI.
Ну а код то куда писать? В win main функцию или в win proc?
Допустим хочу использовать свой класс, где мне его инициализировать, как он должен взаимодействовать с окном?

#ifndef QUESTEST_H
#define QUESTEST_H
class questest{  //класс вопросов и ответов.
  private:
   static int right;
   static int wrong;
   static int ansQuest; // отвеченный вопрос.
   static int quesLoad; // колличество загруженных вопросов.
   static int jumpAns; // номер верного ответа
   static int counterAns;
   int questNum; // номер вопроса по списку.
   int sumAns; //колличество вариантов ответов.
   int ranQues;
   int ranAnsw;
   char bufRus[256]; // массив для перекодировки символов записанных в программе.
   std::string ansMass[10];
   std::string chooseAns;
   std::string correctAns;
   std::string ruDosCoder(std::string&);
   std::string strLimit(std::string& ,int symbLimit=73);
   char* rus(const char* text);
  public:
   questest(){
      right = 0, wrong = 0, ansQuest = 0,quesLoad = 0, questNum = 0;
      sumAns = 0,jumpAns = 1071,counterAns = 0;
   }
   ~questest(){
   }  
      
   void setQuest(std::string quest[]);
   void randAsk();
   void ask();
   void trueAnswers(std::string quest[]);
   void choose();
   void check();
 };
#endif
« Последнее редактирование: 03 Декабрь 2011, 09:34:54 от Mr2 »

Оффлайн CrazyMax

  • Пользователь
  • Сообщений: 922
  • Пол: Мужской
  • DeSmuME Team
    • Просмотр профиля
WinMain - это точка входа в программу.
WinProc - это процедура обработки сообщений окна/класса (Винда посылает ей сообщения, перерисовать/WM_PAINT, изменения размеров и т.д.), их может быть несколько, для каждого окна.

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Про void*
Проще некуда.
представим "твой" код
class qwe
{
...
}
qwe *CreateSomething(int param) - создание объекта
DoSomething(qwe *this, int param) - "метод"
а теперь представим что этот код не твой, а чужой, зашитый в какой-нибудь библиотеке, итого
void *CreateSomething(int param) - создание объекта
DoSomething(void *this, int param) - "метод"
т.к. создатели библиотеки не хотят чтобы ты трогал их класс, или ещё чего, однако чтобы ты мог передавать инфу о нём, в данном случае - указатель.
void * - означает указатель на что-то (тупо адрес в памяти)
void - бывает только тип возврата функции.
void ** - означает указатель на указатель на что-то. и т. д.
Известно, что какой бы не был тип на что указатель - его размер одинаков = адресу. для 32-х битных программ 32 бита, для 64-битных, сам догадаешься.

однако раз void * - адрес = число, то можно в void * хранить и число.
Вообще void * удобен там, где заранее не известен тип.
например есть стандартная функция сортировки.
#include <cstdlib>
int cmp (const void *a, const void *b)
{
return *(const int *)a - *(const int*)b;
}

int main()
{
int a[]={10,2,5,1,20};
qsort(a, sizeof(a)/sizeof(a[0]), sizeof(a[0]), cmp);
return 0;
}

Ты имеешь в виду что принцип работы функций со структурами аналогичен работе методов с классами?
Всё зависит от того, что ты подразумеваешь когда чего-то пишешь. Если ты считаешь это "методом", то наверно это метод ).

Как делегирование поддерживается в простом C?
а делегирование поддерживается в C++?
если да, то что ты понимаешь под делегированием,
и что значит "поддерживается", т.к. в C++ я знаю только наследование, и разделяю наследование с делегированием.

Ну а код то куда писать? В win main функцию или в win proc?
Как и везде в C++, пиши куда хочешь, хоть в отдельный .cpp, хоть ещё как-нибудь, хоть шаблоном, хоть чем, хоть дефайнами.

#include <windows.h>

.......................

void MySuperProgram(............)
{
 ...........
}

..........

int CALLBACK WinMain(.................)
{
  MySuperProgram(.............)
  return 0;
}

...............

int CALLBACK WinProc(.................)
{
 .........
 MySuperProgram(............)
 ..........
}
О_о я написал и Там и Там?!!!

что первое что второе - Callback. Как и функция сравнения сортировки в предыдущем примере.

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1612
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Проще некуда.
представим "твой" код
class qwe
{
...
}
qwe *CreateSomething(int param) - создание объекта
DoSomething(qwe *this, int param) - "метод"
а теперь представим что этот код не твой, а чужой, зашитый в какой-нибудь библиотеке, итого
void *CreateSomething(int param) - создание объекта
DoSomething(void *this, int param) - "метод"
т.к. создатели библиотеки не хотят чтобы ты трогал их класс, или ещё чего, однако чтобы ты мог передавать инфу о нём, в данном случае - указатель.
А, это они инкапсулируют члены структуры... то есть я не смогу обратиться к её членам:

void * - означает указатель на что-то (тупо адрес в памяти)
void - бывает только тип возврата функции.
void ** - означает указатель на указатель на что-то. и т. д.
Известно, что какой бы не был тип на что указатель - его размер одинаков = адресу. для 32-х битных программ 32 бита, для 64-битных, сам догадаешься.

однако раз void * - адрес = число, то можно в void * хранить и число.
Про это читал, не знал лишь зачем нужно заморачиваться с неопределённым типом(void*), если есть вполне конкретные, с которыми работать проще и удобнее.

Вообще void * удобен там, где заранее не известен тип.
например есть стандартная функция сортировки.
#include <cstdlib>
int cmp (const void *a, const void *b)
{
return *(const int *)a - *(const int*)b;
}

int main()
{
int a[]={10,2,5,1,20};
qsort(a, sizeof(a)/sizeof(a[0]), sizeof(a[0]), cmp);
return 0;
}
То есть как альтернатива перегрузке, или шаблону?

Всё зависит от того, что ты подразумеваешь когда чего-то пишешь. Если ты считаешь это "методом", то наверно это метод ).
Дело не во мне, мне интерестна концепция Win32 api, какую парадигму MS использовали. Процедурную, ООП или что то среднее... :)

а делегирование поддерживается в C++?
если да, то что ты понимаешь под делегированием,
и что значит "поддерживается", т.к. в C++ я знаю только наследование, и разделяю наследование с делегированием.
Как и везде в C++, пиши куда хочешь, хоть в отдельный .cpp, хоть ещё как-нибудь, хоть шаблоном, хоть чем, хоть дефайнами.
Я знаю как замутить делигирование через классы, но мне интересно как это реализовано в простом C.
Цитата: r57shell
Также на C пишется на принципах ооп. Если надо допустим делегирование, то просто добавляется свойство, с указателем на другой "объект" - который уже будет делегантом или как там я уже забыл.
#include <windows.h>

.......................

void MySuperProgram(............)
{
 ...........
}

..........

int CALLBACK WinMain(.................)
{
  MySuperProgram(.............)
  return 0;
}

...............

int CALLBACK WinProc(.................)
{
 .........
 MySuperProgram(............)
 ..........
}
О_о я написал и Там и Там?!!!

что первое что второе - Callback. Как и функция сравнения сортировки в предыдущем примере.
Попробуем. :)
« Последнее редактирование: 03 Декабрь 2011, 22:31:37 от Mr2 »

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
То есть как альтернатива перегрузке, или шаблону?
а в чистом C нету шаблонов. А перегрузка в данном подходе (сортировки) не поможет: надо будет каждую сортировку дублировать, т.к. тип массива разный, иначе сортировка не будет знать какой тип подставлять в cmp. то есть один и тот же код сортировки, надо будет тупо дублировать, а мы от этого избавляемся если сделать void *.

Я знаю как замутить делигирование через классы, но мне интересно как это реализовано в простом C.
Ничего не реализовано - реализуй сам..

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1612
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
а в чистом C нету шаблонов. А перегрузка в данном подходе (сортировки) не поможет: надо будет каждую сортировку дублировать, т.к. тип массива разный, иначе сортировка не будет знать какой тип подставлять в cmp. то есть один и тот же код сортировки, надо будет тупо дублировать, а мы от этого избавляемся если сделать void *.
Понял. Спасибо. Читал в основном книжки по C++, и там такой способ не упомянали. :-\

Ничего не реализовано - реализуй сам..
Да не нужно оно мне, я просто хотел посмотреть как делегирование выглядит в простом C. :wacko:
« Последнее редактирование: 03 Декабрь 2011, 23:47:47 от Mr2 »

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Читал в основном книжки по C++, и там такой способ не упомянали. :-\
А я вообще не читал книжек по С++, т.к. это бессмысленно.
Достаточно взять мануал, узнать весь синтаксис и конструкции языка, а потом уже станет понятно что и как можно делать.

а вообще, возьми Жирный опенсорс на чистом С на ооп, и посмотри, что там да как.

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1612
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Продолжаем эксперементы с 3D.
Повернул в ручную! :D

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
1) почему "ты свой аватар шатал"?.
2) изометрия - уныло. перспективу давай.

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1612
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
1) почему "ты свой аватар шатал"?.
Это переодевания из MK4. :lol:
2) изометрия - уныло.
Да, да, я в начале не понял в какую сторону я его повернул.
А потом до меня дошло что такое паралельная проэкция.
Всётаки лучше один раз пощупать, чем сто раз увидеть. :lol:
перспективу давай.
Будем работать.... :wacko:

Оффлайн Гламурная киса

  • Пользователь
  • Сообщений: 317
  • Пол: Мужской
  • иичко
    • Просмотр профиля
Для создания своих игр лично я использую code::blocks, paint.net (иногда фотожоп), 3ds max ну и библиотеки (или двигателя) для графона, типа SDL, Irrlicht, DGLE2, HGE.

Гей-мейкеры и прочие конструкторы ненавижу.
Добавлено позже:
как-то приходилось баловаться с AS 2.0 (3.0) и с JAVA SE ... Не затянуло...