Delphi World - Аркадний двигун

Ага все знайшли і якщо ми тепер стоїмо на нашій прямій і ми знаємо прирост коефецинтів. ми можемо побігати це буде виглядати так XObj := Xobj+Fddx; - ось тут можна і не вичісувати FDdx тому що він завжди дорівнює (виходячи з ентою формули _Fddx:=Sin(_AlphaRad)*_StepX; ) _StepX . YObj := Yobj+Fddy; Тепер якщо ми стоїмо то ми можемо стрибнути присіти і т ну це залежить тільки від вашої фантазії. я робив для того щоб якщо до лінії +-StepY то я автоматом "падаю (прикріплююся) на цю лінію" так як не завжди у вас буде відстань від точки до прямої дорівнювати 0 так як ми будемо падати з певним кроком (швидкістю) от представте що ми падаємо, крок дорівнює 8, а на даний момент відстань до прямої = 4 в наступному моменті відстань дорівнюватиме -4 . і мені доводиться у такий момент переносити координати героя на коорд. точки перетнув і взагалі це навіть непомітно. ось бачили так що це похибка мого движка :) Ну а якщо у нас прямих багато , то нам потрібно знати від лінії Номер , Кут ,Прирощення ітд. взагалі на який прямий ми стоїмо і що нам від неї чекати :) або яка з ліній ближче до нас. я це робив у звичайному масиві

( Так, в даному алгоритмі я застосовував довжину лінії 32 (можна і іншу або просто всі лінії різні) тут я хотів придумати більш оптимальний варіант пошуку ліній. Уявіть що у нас на рівні 10000 ліній. зрозуміли . Довго воот . І поки ентот масив з 10000 прокрутить , а також якщо у нас будуть інші Тварини бігати на рівні і так само будуть шукати найближчі лінії плюс шукати шлях.поки нічого, якщо раптом придумаєте буду радий побачити це хоча є такий момент відсортувати всі лінії по порядку з лівої верхньої по праву нижню там вже можна і вичіслити якісь лінію навколо, поряд з Героєм і цикл великий не знадобиться. це як і в масиві знайти елементи точок навколо точки. )

Так само я шукаю стінки тільки вже в циклі дивлюся тільки ті вертикальні прямі які видно (всередині йде перевірка на вертикальні прямі) і так само вивчаю відстань до них якщо відстань попадає в +8 дивлячись з якого боку щодо героя знаходиться то ми туди і не можемо йти Ну вообшем всі основні моменти я розповів Вообшем я збудував три основних класи з якими все енто працює

Все з нього починається клас "Лінія" CLine=class Утримує в собі X1,Y1,X2,Y2 також як тільки ми привласнили координати вичіслює кут дивиться вертикальна вона чи ні

Це вже список ліній CLines=class Утримує список ліній (масив типу CLine) Знає кількість ліній :) Вміє зберігати карту(список ліній) Також завантажувати карти Чистити

Ну і він найголовніший:) спадкоємець всього хорошого від класу Списку ліній (CLines) CEngine=class(CLines) Успадкував все від класу CLines (якщо не знаєте як це читаєте літературу.) але навчився дивитися щодо координат героя близькі прямі Управляти героєм та іншим.

Взагалі-то сам двигун нескладний, його навіть можна спростити І як, зараз навіть постараюся пояснити Ну перше, що я хотів би переробити так це. якісь не раціональні в моєму движку моменти зі стіною тобто дивимося де стіна ітд, некрасиво як то. в принципі щось працює, але хотілося б просити і зробити більш універсальним і тут днями я придумав як це зробити, але можливо зіткнуся з іншимипроблемами Так от, починаємо викладати свої думки По-перше у нас є пряма по якій ми рухаємося Гаразд ми знайшли кут щодо горизонталі ітд ми рухаємося, але стіна, як інакше на це подивитися суто фізіологічно. Ага ось тут і настає момент коли потрібна фізика! Уяви що ти йдеш по прямій вона піднімається і тобі все складніше і складніше на неї йти а потім бац і ухил ще крутіше і ти просто не можеш на неї забратися Хех так можна зробити так Є тіло яке знаходиться в стані рівноваги і стоїть на площині ( в нашому випадку прямий) під кутом до горизонталі (Alpha = 45) ну візьмемо цей кут :) наприклад тесть тіло не скочується ми докладаємо до нього силу або веррх або, вниз і тіло ковзає ! Природно що, якщо кут більше 45 (у нашому випадку) і ми не прикладаємо сили, то тіло почне ковзати вниз, а якщо ми спробуємо "залізти" на макс кут то ми будемо як би миттєво скочуватись.

Тоді нам треба знати: 1. Кут щодо горизонталі 2. Масу тіла (у нас буде точка) - постійне мені здається енто тут і не настільки важливо можна заліпити будь-яке число 3. Коефіцієнт тертя (або силу тертя ) при тому максимальному вугіллі при якому тіло перебуває у стані рівноваги - теж константа (звідси поки що що швидкість = 0) Максимальний кут представляє з себе той кут на який наш герой ще може залісти якщо кут більше то він або скочується або лізе повільно Бачили напевно в 3D іграх коли на крутий схил намагаєшся залісти починаєш скочуватися чим крутіше схил тим швидше. Це я побачив у Serius Sam 2 там щось пожеже 4. Силу з якою ми штовхаємо тіло. - постійне Силу можна вичіслити так, нехай тіло рухається зі швидкістю (з кроком) 6 пікселів в сек :) по горизонтальній поверхні нам треба знайти силу, яку взараз прикладають до тіла

5. виходячи з сили будемо знаходити крок (або швидкість) руху тіла (Силу ми знайшли вона у нас завжди однакова) тобто тут відразу видно що якщо з тією силою, з якою ми штовхаємо тіло по гориз. поверхні ми будемо штовхати вгору по похилій поверхні крок буде різним або навіть якщо ми штовхаємо на круту гору негативним тобто, буде тут же скочуватися або якщо ми штовхатимемо з гірки будемо швидше бігти ось і все впринципі думаю що він більш вдалий ніж той що у мене раніше І інший момент А Адже можна зробити його а-ля 3d це коли ми бігаємо також по одній площині але всі елементи по справжньому трьох мірні, пам'ятайте Тарзан гаму . Та й не тільки, якщо ми візьмемо замість лінії площину ??