Понедельник, 07 Октября 2024, 08:24

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
XakepДата: Воскресенье, 20 Сентября 2015, 09:51 | Сообщение # 161 | Тема: Использование Unity в VS или Mono
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата jonikster ()
не. учить тригонометрию я не буду. лучше использовать готовое

Если ты не можешь осилить тригонометрию, то у меня для тебя плохие новости...
XakepДата: Воскресенье, 20 Сентября 2015, 00:48 | Сообщение # 162 | Тема: Использование Unity в VS или Mono
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата jonikster ()
Не никак. при поворотах нужна тригонометрия, а в юнити нет.

тебя только тригонометрия останавливает от использования юнити? Если да, то это бред, самую базу выучи, поищи как на практике применгять тригонометрию, это очень просто.
XakepДата: Суббота, 19 Сентября 2015, 19:35 | Сообщение # 163 | Тема: Движок для создания звуковой игры
めちゃくちゃちゃ
Сейчас нет на сайте
есть библиотека OpenAL попробуй ее, для C# она есть.
XakepДата: Пятница, 11 Сентября 2015, 09:27 | Сообщение # 164 | Тема: Программист не ищет художника...
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата Ordan ()
Ориентироваться и работать в своем коде многократно эффективней чем юзать конструкторы/движки/библиотеки. Для тех кто работает программистом юзанье всех этих якобы облегчений приводит к деградации.

Если код нормально написан, да самопал намного эффективнее юзать чем например UE4 для игры соответствующего уровня.
Я не говорю что человек должен постоянно использовать всякие библиотеки, в любом случае пытаться самому реализовать все это очень полезно, понимаешь как все это работает, но в итоге придешь к тому, что лучше не изобретать велосипед, а взять готовое решение, и заострить внимание на программе/игре.

Цитата Gudleifr ()
Видимо, есть какая-то технологическая "колея" из которой Вы боитесь выйти, и это сказывается на обсуждении.

Нету.
XakepДата: Пятница, 11 Сентября 2015, 08:31 | Сообщение # 165 | Тема: Программист не ищет художника...
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата Gudleifr ()
Есть очень много библиотек, которые я бы "замучился делать", но вероятность того, что они мне встретятся в жизни, околонулевая.

Ну так и говори только за себя, тебе нравится заниматься ерундой и хардкодить, а кто-то хочет написать что-то стоящее и полезное, при этом чтобы все было отлажено.
Я так понял вообще нафиг использовать какие-то мат библиотека, нужно самому написать, нафиг использовать STL сам напишу, нафиг мне использовать какую-то оконную библиотеку, сам напишу.
XakepДата: Вторник, 08 Сентября 2015, 21:38 | Сообщение # 166 | Тема: Программист не ищет художника...
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата Gudleifr ()
при этом жутко тормозят, жрут ресурсы и требуют "танцев с бубном".

Надо правильные выбирать библиотеки, к примеру библиотека CGAL, в одиночку ты замучаешься все это делать, а когда сделаешь окажется что не все учел, и допустим в триангуляции нужно учитывать границы, или при той же триангуляции может создать треугольники которые будут пересекать границу, и это не такие уж и тривиальные задачи.

Добавлено (08 сентября 2015, 21:38)
---------------------------------------------
Цитата Gudleifr ()
Почти как Commander Keen?

не играл в эту игру, но жанры разные, Ori - это метроидвания


Сообщение отредактировал Xakep - Вторник, 08 Сентября 2015, 21:40
XakepДата: Вторник, 08 Сентября 2015, 21:26 | Сообщение # 167 | Тема: Программист не ищет художника...
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата Gudleifr ()
Это - пожалуйста, но, все равно, не понятно, что вы имели в виду под "игрой такого уровня". Я (исключительно по картинкам) увидел очень красивую поделку "под настолку", для игры в которую не особенно и нужен компьютер.

Ori and the blind forest, очень красива игра это во первых, для достижения такого уровня графики и взаимодействия с миром нужно очень много расчетов, сама игра по геймплею так же прекрасна.
XakepДата: Вторник, 08 Сентября 2015, 21:20 | Сообщение # 168 | Тема: Программист не ищет художника...
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата Gudleifr ()
Неужели, начинающие программисты не видят, что у них есть нечестное преимущество - компьютер, который, если снести конструктор, сможет не только рисовать бэки?

сейчас все в принципе по другому, раньше хватало 128МБ оперативки, а сейчас один только браузер почти гиг сжирает, сейчас уже об экономии оперативной памяти или еще что-то люди не задумываются, и вообще не понимаю, чего ты хочешь от начинающих, редко они о таких вещах задумываются, да и в принципе зачем, прогресс не стоит на месте, зачем усложнять себе жизнь, если можно сделать намного проще. Конечно понимание как работает все изнутри очень помогает, но для начала это не нужно, для начала нужно хоть как-то освоиться. И в итоге более опытные программисты уже не буду изобретать велосипеды и возьмут готовое решение (конструктор/движок, библиотека какая-то может), потому-что они и отлажены лучше, и экономия времени и нервов. Изобретение велосипедов полезно для понятия как оно все таки внутри работает.
XakepДата: Воскресенье, 06 Сентября 2015, 22:01 | Сообщение # 169 | Тема: Программист не ищет художника...
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата Gudleifr ()
SkySupra, Вы подтверждаете сложившееся у меня мнение, что современные программисты совершенно не умеют решать задачи

Ты не на тех форумах ищешь просто, здесь в основном новички сидят, а у новичков всегда в начале пути амбиции зашкаливающие.
XakepДата: Суббота, 05 Сентября 2015, 11:05 | Сообщение # 170 | Тема: Профессиональный игровой композитор.
めちゃくちゃちゃ
Сейчас нет на сайте
А что-то подобное можешь написать, она довольно длинная и разнообразная, и за сколько такой трек по цене?
XakepДата: Пятница, 21 Августа 2015, 21:05 | Сообщение # 171 | Тема: [Gamiron №10] Lightboom
めちゃくちゃちゃ
Сейчас нет на сайте
Очень круто, жду проект ) удачи )
XakepДата: Пятница, 21 Августа 2015, 18:28 | Сообщение # 172 | Тема: Aphalin Compiler
めちゃくちゃちゃ
Сейчас нет на сайте
решил сделать первый вариант.
Цитата vasua99 ()
Это старый Си-синтаксис. В новом именно так, как я написал(вообще поддерживаются оба)

действительно такое есть, ну в С++ вообще принято писать static_cast/dynamic_cast/reinterpret_cast/const_cast ну и тд )) ну и для указателей вряд ли использовать int(a) удобнее.

Добавлено (29.05.2014, 19:53)
---------------------------------------------
сделал оба варианта преобразования:
Код
a : ptr = cast (ptr) myobj;
x : int = float (num);


сделал простенький препроцессор для определения нужной платформы на которой компилируется программа:
Код
$ifdef x86_64
     def memcpy (dst, src : ptr; size : int64; alignVal : int = 4; isVolatile : bool = false)       external "llvm.memcpy.p0i8.p0i8.i64";
     def memset (dst : ptr; val : byte; len : int64; alignVal : int = 4; isVolatile : bool = false) external "llvm.memset.p0i8.i64";
$else
     def memcpy (dst, src : ptr; size : int; alignVal : int = 4; isVolatile : bool = false)         external "llvm.memcpy.p0i8.p0i8.i32";
     def memset (dst : ptr; val : byte; len : int; alignVal : int = 4; isVolatile : bool = false)   external "llvm.memset.p0i8.i32";
$endif


добавлены оптимизации для распределенных вычислительных систем (суперкомпьютеров, кластеров), автоматическая параллелизация через OpenMP, в том числе и на GPGPU (только NVIDIA на CUDA). Данные оптимизации пока что работают только на Linux, в будущем будут работать и на Windows. Сейчас делаю макросы и шаблоны (ключевые слова macro и template) и в скором времени будет поддержка OpenMP в самом компиляторе. Так же пришлось писать собственные аллокаторы памяти для компилятора, пока еще не дописанные, но уже почти ) сами аллокаторы уже есть, а вот менеджера памяти пока нету, точнее он не дописан.

Добавлено (29.05.2014, 19:54)
---------------------------------------------
так же добавил новые ключевые слово alias для псевдонимов, пример:
Код
alias LPCSTR = ^char;
alias GLSecondaryColor3bEXT = def gl_cc (red: GLbyte; green: GLbyte; blue: GLbyte);


Добавлено (21 августа 2015, 18:28)
---------------------------------------------
Решил все переделать biggrin Очень понравилось реализовывать свой яп, решил новый синтаксис теперь реализовать
Вот что пока что на придумывал:

Работа со списками:
Код
<4 x Int> A = <2, 5> ++ <3, 5> // Склейка списков
[7 x Int] x = [1,2,3...]
[3 x Int] r = [1] ++ [2,4]

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

Возведение в степень вещественных чисел **, целых чисел ^
Код
Float a = a ** 2


Преобразование типов:
Код
Int a = static_cast<float> 1.f
auto pl = dynamic_cast<Player> obj


есть ключевое слово auto, по смыслу такое же как и в C++, но не такое гибкое конечно, там слишком сложно они сделали.
ptr<Type> - указатель на тип, может потом сделаю более удобно, но планирую что в языке не нужно будет особо пользоваться указателями, а эта возможность для всяких интересных "хаков", для более удобной реализации связных списков например.
Динамическое выделение памяти через умные указатели, может и не будет их, пока не решил )
Инициализация структур данных можно производить через фигурные скобочки.
Строки - это просто списки из символов:
Код
String hello = "Hello " ++ "World!"

думаю как нибудь импортировать некторые вещи из стандартной библиотеки С++, например вектор:
Код
Vector<int> a = {1, 2, 4}
a.push(12)


лямбда выражения (может переделаю):
Код

onClick (lambda[a](Int x, Int y) -> Int

   auto r = a.pop()
   putStr x+y+r
   return x+y+r

end)


range based циклы:
Код
for (auto i : a)
...
end

for (Int a in [0..10])
...
end


Импорт модулей:
Код
import system
import glfw
import openal
import opengl


Типы:
Код
enum Align = Left, Right, Center // Перечисление
typeclass Num = Int, Float, Double // Класс типа, для автоматической генерации, на подобие шаблонов
alias String = [Char]

// Итераторы, конечто же по другому все будет, это там пример
class MyList <Int size>
private:
   [Size x Int] data
   Int cursor = 0

public:

   def begin() -> ptr<Int> :: inline
    addr (data[0])

   def end() -> ptr<Int> :: inline
    addr (data[size-1])

   def next() -> ptr<Int> :: inline
    addr (data[++cursor])

   def prev() -> ptr<Int> :: inline
    addr (data[--cursor])

   def get() -> Int :: inline
    data[cursor]

end


тип можно задать с именными компонентами, к примеру у массива:
Код
alias Vec4f = <4 x Float> :: x <-> r, y <-> g, z <-> b, w <-> a
Vec4f color = <0,0,0,0>
color.a = 1; // или color.w = 1 будет эквивалентно

Так же и с матрицами:
Код
alias Mat4f = [4 x Vec4f] :: a, b, c, d

можно задать константы матрицы таким образом:
Код
const Mat4f.zero = [<0.f, ...>, ...]
const Mat4f.indent = // Возможно сделаю вместо точки ::, т.е. Mat4f::Indent = [...]
[
   <1.f, 0.f, 0.f ,0.f>,
   <0.f, 1.f, 0.f ,0.f>,
   <0.f, 0.f, 1.f ,0.f>,
   <0.f, 0.f, 0.f ,1.f>
]

Функции:
Код
def sum (const Num a, b) -> auto
   a+b

// Возведение в степень
def binary ** (<Num> a, <Num> a, b) -> auto :: inline
   fpow (a, b)
end

// Перемножение 2х чисел
def binary * (const Mat4f m1, m2) -> Mat4f :: inline
     
   Mat4f res
     
   for (Int i in [0..3]) :: unroll (all)
      
    Vec4f ci = m1[i][0]*m2[0];
      
    for (Int i in [0..3]) :: unroll (all)
     ci += m[i][j]*m2[j]
      
    res[i] = ci
      
   end
     
   return res

end


Пример обновления модельной матрицы объекта:
Код
def updateMatrices()

   Mat4f mr = math::rotateMat    (Mat4f.indent, rotation, <0.f, 0.f, 1.f>)
   Mat4f mt = math::translateMat (Mat4f.indent, <position, 0.f>)
   Mat4f ms = math::scaleMat     (Mat4f.indent, <scale   , 1.f>)

   modelMatrix = mt*mr*ms;
   MVPMatrix   = camera.MVPMatrix*modelMatrix

end


Автоматического сборщика мусора не будет, вместо них будут умные указатели, как в C++:
Код
[unique_ptr<Object>] objects
objects ++= object
objects.erase object.get()

Ассоциативные массивы создаются таким образом:
Код
[String <- unique_ptr<Object>] objects :: Hash

оператор :: Hash говорит что нужно использовать хэш таблицы вместо красно-черных деревьев
Способ можно будет самому запрограммировать после :: в основном будет идти макрос который нужно использовать (так же как и unroll в предыдущем примере с матрицами)

------

Все это чисто для фана, так что не нужно писать что "А зачем это нужно когда есть то-то и то-то..."


Сообщение отредактировал Xakep - Пятница, 21 Августа 2015, 18:46
XakepДата: Пятница, 21 Августа 2015, 15:20 | Сообщение # 173 | Тема: Forgotten Legendz
めちゃくちゃちゃ
Сейчас нет на сайте
а когда релиз?
XakepДата: Среда, 12 Августа 2015, 13:47 | Сообщение # 174 | Тема: Плавное движение в сторону точки B из точки A
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата Alkosha ()
Не уверен подойдёт ли она мне, так как у меня координаты изменяются без дельта-тайма.

поставь deltatime равным примерно 0.001f может меньше, может больше, тут нужно смотреть на результат.
В данном примере скорость будет меняться не линейно, если нужно чтобы линейно достигал цели, то как-то так:
Код

vec2 move2Target (vec2 current, vec2 target, float speed) {

    vec2 dir (target.x - current.x, target.y - target.x);
    float length = sqrt (dir.x*dir.x + dir.y*dir.y);
    dir = vec2 (dir.x/length, dir.y/length); // Получили направление в диапазоне [0..1]
    return vec2 (current.x+dir.x+speed, current.y+dir.y*speed);

}


Сообщение отредактировал Xakep - Среда, 12 Августа 2015, 13:48
XakepДата: Понедельник, 10 Августа 2015, 20:51 | Сообщение # 175 | Тема: Столкновение в SFML
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата Arcanis ()
Xakep, если для данного случая это действительно самый оптимальный вариант, я готов это принять. Но что тогда делать, если у меня например будут наклонные поверхности, или того хуже, спрайты с какой-нибудь хитровые**ной текстурой?

В таком случае уже лучше Box2D или Nape использовать, обычно по сложным текстурам сначала полигон строят, потом производят триангуляцию, либо разбиение на выпуклые многоугольники, и уже с этими многоугольниками производится столкновение. Nape автоматически может генерировать все что нужно.
Наклонные создаешь простой треугольник для столкновения (в физических движках отдельно спрайты, отдельно физические тела), в общем если нужна сложная физика, сложные столкновения, то лучше взять готовое решение, если очень просто, на подобие дудл джампа, то тут лучше вручную все сделать.
XakepДата: Понедельник, 10 Августа 2015, 20:36 | Сообщение # 176 | Тема: Столкновение в SFML
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата RobotZero ()
Я думаю в SFML не предусмотрены столкновения - не встречал

Ну столкновения можно и самому реализовать, ничего сложного тут нету, тем более с простейшими примитивами

Если тебе на подобии дудл джампа нужно, то использовать Box2D очень глупо, простейшее условие:

Код
player.x < platform.x+platform.halfw &&
player.x > platform.x-platform.halfw &&
player.y-player.radius < platform.y+platform.halfh &&
player.y+player.radius > platform.y-platform.halfh &&
player.velocity < 0

Получается если игрок падает, проверяем на столкновение с платформами (player.velocity < 0) на а дальеш просто проверяем, находится ли игрок внутри области платформы.
halfw, halfh - половина ширины и высоты платформы
radius у игрока - собственно радиус при котором он столкнется с платформой

Код не проверял, просто идея как реализовать можно, может где ошибки.


Сообщение отредактировал Xakep - Понедельник, 10 Августа 2015, 20:38
XakepДата: Понедельник, 10 Августа 2015, 20:23 | Сообщение # 177 | Тема: Плавное движение в сторону точки B из точки A
めちゃくちゃちゃ
Сейчас нет на сайте
Alkosha, что значит без погрешности? В смысле что координаты точки А будут точно равны координатам точки Б в какой-то определенный момент без погрености? если да то я выше написал полную реализацию даже, только на нужный язык программирования перенести нужно, а т.к. тут кроме математических операция ничего нету, то с этим проблем не должно возникнуть.

Функция интерполяции:
Код

public static function interpTo (current : Float, target : Float, deltaTime : Float, interpSpeed : Float) {

    if (interpSpeed == 0)
     return target;

    var dist : Float = target - current;

    if (dist*dist < SMALL_NUMBER)
     return target;

    var deltaMove : Float = dist*deltaTime*interpSpeed;
    return current+deltaMove;
       
}


компоненты x и y - плавно перемещаются и текущего положения в (x2, y2):
Код

x = interpTo (x, x2, dtime, 10);
y = interpTo (y, y2, dtime, 10);


Чтобы без погрешностей было, тут используется простое условие, если x примерно равна x2, то приравниваем ее в x2 и дальше ничего не вычисляем.
XakepДата: Воскресенье, 09 Августа 2015, 22:03 | Сообщение # 178 | Тема: Плавное движение в сторону точки B из точки A
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата Slayez ()
я не вижу в твоём коде x1 x2 y1 y2... и причём тут deltaTime я вообще не пойму...

про дельта тайм погугли, попробуй поставить просто маленькое значение очень, к примеру 0,001, функцию которую привел делает примерно то что я описал выше, кроме нормирование, потому-что оно тут в принципе не особо то и нужно, x1, y1 - x, y в коде в самом низу, InterpTo - плавно приводит текущее значение к целевому.

Добавлено (09 августа 2015, 21:59)
---------------------------------------------
если тебе именно направление нужно, то:

dir = (needX - x, needY - y)
norm = length (dir)
dir.x /= norm
dir.y /= norm

где length (v) = sqrt (v.x^2 + v.y^2)

Добавлено (09 августа 2015, 22:03)
---------------------------------------------
Думаю тебе будет полезно: Линейная алгебра для разработчиков игр (самое главное про векторы прочитай)


Сообщение отредактировал Xakep - Воскресенье, 09 Августа 2015, 22:10
XakepДата: Воскресенье, 09 Августа 2015, 19:18 | Сообщение # 179 | Тема: Плавное движение в сторону точки B из точки A
めちゃくちゃちゃ
Сейчас нет на сайте
Ахаха блин, и еще кто-то говорит что программисту не нужна математика biggrin
По теме, чтобы узнать направление вектора, достаточно из точки Б вычесть точку А (x2-x1, y2-y1) и нормировать вектор (привести к единичному), для этого раздели значения на длину вектора.
Плавное движение можно на подобие такого сделать (На хаксе, но думаю перевести на шарп не составит труда):

Код

public static function interpTo (current : Float, target : Float, deltaTime : Float, interpSpeed : Float) {

   if (interpSpeed == 0)
    return target;

   var dist : Float = target - current;

   if (dist*dist < SMALL_NUMBER)
    return target;

   var deltaMove : Float = dist*deltaTime*interpSpeed;
   return current+deltaMove;
     
}

...

x = interpTo (x, x2, dtime, 10);
y = interpTo (y, y2, dtime, 10);


SMALL_NUMBER - пороговое значение, при котором current станет target, я ставлю 1 пиксель.


Сообщение отредактировал Xakep - Воскресенье, 09 Августа 2015, 19:18
XakepДата: Воскресенье, 09 Августа 2015, 15:42 | Сообщение # 180 | Тема: Хранение проектов в облаке
めちゃくちゃちゃ
Сейчас нет на сайте
я использую github
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг