Сталкивающиеся шары

Content on this page requires a newer version of Adobe Flash Player.

Информация
Название: 
Сталкивающиеся шары
Формат видео: 
swf
Продолжительность: 
32:30
Размер: 
16 Мб

Клик - добавить шар

<-- и --> двигать шары

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

Это мой первый урок и возможно не всё будет доступно изложено, но я думаю вы справитесь.

Исходник: 

Похожие записи

Комментарии

Аватар пользователя Fly

Классная дикция. Хорошо обьясняешь :)

1) Админ всегда прав
2) Если админ не прав, смотри пункт 1

Мы в контакте - https://vkontakte.ru/club9573247
Не отвечаю на вопросы в личку касаемо Flash, у нас для этого есть форум

Аватар пользователя samana

Серьёзно? Спасибо Fly!

Аватар пользователя Heilfuhrer

Отличный урок, продолжай в том же духе)) Все очень доходчиво объяснил. Надеюсь  пригодится. Если больше 400 шариков натыкать fps падает =/

Аватар пользователя vitkuz

samana, мне тоже очень понравилось. У вас реально хорошо получается.
Может хотите поучавствовать в чем нибудь более интересном и денежном?

smile

Если есть какие нибудь вопросы или пожелания - пишите.

Аватар пользователя SarGun

Отличный урок!! Очень понравилась озвучка!
а урок немного доработать бы.. я добавил много шариков и они стали налазить друг на друга.. 

Аватар пользователя samana

Спасибо  Heilfuhrer! У меня fps падает уже при 60 шарах (комп старых жуть).

 

vitkuz Вам тоже спасибо! Я на самом деле именно после этой денежной статьи, решил попробовать сделать урок, посмотреть как получится, что скажут люди. Предложение заманчивое, надо хорошо продумать и понять смогу ли осилить. Надеюсь получится!

 SarGun спасибо! Конечно этот урок далеко не идеальный способ для "физического" поведения шаров, скорее самый быстрый. А при большом количестве, шары начинают бунтовать и шевелится )

Аватар пользователя switcher

красавчик

good

<i>Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете</i><br /><b>Стив Макконнел. &quot;Совершенный код&quot;</b>

Аватар пользователя samana

  switcher  

thank_you

 

Аватар пользователя Валрера

САМАНА ТЫ ЛУЧШИЙ!!!! СПАСИБО ТЕБЕ ОГРОМНОЕ!!!!
А как сделать что бы пол(у тебя лёд)отражал шарики как у тебя?

Programmer Action Script 3.0

Аватар пользователя samana

Валрера Спасибо! Отражение сделано не сложно, я с помощью битмапДаты делаю снимок (draw) нужной области сцены, а битмапу переворачиваю по вертикали, и ставлю в нужное место.

Аватар пользователя Валрера

Спасбо)))

Programmer Action Script 3.0

Аватар пользователя Pryxan

Спс хороий урок и очень хорошо все обьясняется

good

Аватар пользователя CuCaDMuH

хорошо! только если набрать дофига шаров на компе начнется самый настоящий апокалипсис: одни за другими начинают тормозить браузер, закачка, курсор...

урок пока не видел, это просто результат работы, которой получится оценил ^_^

Прячься, это админ...

Аватар пользователя samana

CuCaDMuH --> Конечно, чем больше всего, тем больше компьютер думает, в общем-то и логично.

 

Pryxan --> Спасибо )

Аватар пользователя Asad

Аффтар - красавчик.
Буду учиться..
Всем брать пример!

жду новых работ:)

Аватар пользователя skelani

samana  как с вами связаться? если есть можно icq или skype в лс плз

smile

Аватар пользователя samana

Asad - Спасибо, будем стараться!


Аватар пользователя Ben

Урок интересный, сделан качественно. Единственное мне не очень понравился просчет отталкивания шаров, много лишних расчетов.
Я реализовал так:
public function hitBall():void{
            for(var i=0; i<allBalls.length;i++){
                var curBall=allBalls[i];
                var minDist=curBall.r+r;
                var dist=distance(curBall);
                if(curBall!=this && dist<minDist){
                    var collisionDist=(dist-minDist)/2;
                    var dx=(curBall.x-x)/dist*collisionDist;
                    var dy=(curBall.y-y)/dist*collisionDist;
                                                   
                    x+=dx; xspeed+=dx;
                    y+=dy; yspeed+=dy;
                               
                    curBall.x-=dx; curBall.xspeed-=dx;
                    curBall.y-=dy; curBall.yspeed-=dy;
                }           
            }
        }

       public function distance(obj:Ball):Number{
            var dx=obj.x-x;
            var dy=obj.y-y;
            return Math.sqrt(dx*dx+dy*dy);
        }

Отличие в том, что меньше использовались функции библиотеки Math.
Если мои расчет кривой, прокомментируйте пожалуйста где

smile

Аватар пользователя samana

 Ben - всё правильно, конечно оптимизируйте если есть возможность, ещё несколько fps можно добавить, проверяя сначала на hitTestObject, а уже потом делать все расчёты, работает ещё быстрее, проверял.

Аватар пользователя gandolf

Офигенный урок. Все понятно даже для таких нубов как я

goodgood

Аватар пользователя mitien

есть пара интересных моментов. сенкс за урок.
но если честно разачаровала конуовка - не расказал хачем почему и откуда  формулы:)

вдохновил на написание своих уроков в том в чем сам шарю по AIR

ps: Спрашивайте кому что интересно.

Аватар пользователя samana

gandolf - Спасибо!

mitien - Согласен с вами, практически не объяснил. Когда сам дошел до этого момента, понял что если начать рассказывать про косинусы и синусы для тех кто их не знает совсем, то на это уйдёт много времени, по этому представил их как способ управлять направлением  объекта.

Аватар пользователя Anti_Karhad

В приложение есть пару недостатков!!! Пишите в личку если хотите знать каких!

Аватар пользователя samana

Anti_Karhad - повторюсь, этот способ столкновения совершенно не идеальный, и далеко не единственный, и абсолютно не оптимизированный. Этот урок для того, что бы натолкнуть на какие нибудь мысли людей в этом направлении.

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

Аватар пользователя vals

samana,

Цитата: samana

Этот урок для того, что бы натолкнуть на какие нибудь мысли людей в этом направлении.

 

Натолкнул, и еще как! Решусь показать свою самую первую работу - до этих шариков Flash меня как-то не цеплял. После них вдруг воодушевился и рисовал целую неделю - пока разобрался с принципами анимации, пока освоился...

Первый вариант я только повторил урок, ну и пририсовал шарикам блики и сделал их немного акварельными.

А вот второй вариант -  воплотил в соударения мат.модель упругого удара для реализации бильярда. Вот что получилось. На лузы терпения не хватило, так что шары не падают, но издают звуки при соударениях со столом и бортами.
Картинку стола, конечно, содрал - да простит меня mail.ru

Смотреть тут 

Аватар пользователя samana

 vals - Здорово, рад что помог воодушевиться, пусть вдохновение не покидает вас!!!

Очень приятно осознавать, что помог кому-то.

Аватар пользователя vals

вот только не могу сообразить как сделать вращающийся шар, с номером, или с полоской... простое 3D преобразование, боюсь, не поможет - надо придумывать что-то другое, типа полной модели объемного шара...
либо какие сферические искажения деталей шара...
есть идеи? 

Аватар пользователя Neirol

Очень приятно было смотреть урок. Правда есть несколько заметок.

Ключевое слово package указывает нахождение класса в его пакете (иерархии директорий), если класс находится в той же директории, где и используется основным файлом то пакета нет и ничего после package не указывается.

public - это не открытый класс, а публичный, доступный для использования из всех сторон (наследуемых классов, из самого класса, из других классов, другого кода). Это ключевое слово одно из составляющих инкапсуляции (PPP - public private protected). 

Во флеше можно сразу получить готовый шаблон класса, для этого создается не AS файл, а ActionScript 3.0 Class. Если у пользователя Flash CS установлен Flash Builder, то можно синхронизировать его с Flash и писать созданный во Flash класс в нем. 

Круглые скобки в конструкторе существуют специально для того, чтобы указать возможные передаваемые в конструктор параметры, которые в дальнейшем могут в нем использоваться. Эти параметры указываются в конструкции new ClassName(param...), где params и есть эти параметры.

 В начале урока не представился :-(
А в первом уроке спалился, я заметил подготовленный текст урока :D
Но в этом нет ничего страшного, я тоже так часто делаю, бывает язык просто не проворачивается. 

Написал программу? Проверь на ошибки. Исправил ошибки? Проверь еще раз. Нет ошибок? Ты плохой программист!<br /><br />https://prograph.ru/ - видео уроки по программированию в разных средах, а также справочники, программы и новости.<br />

Аватар пользователя samana

 Neirol  - Согласен и с вами, терминологию (package,public) особо не объяснил, суть урока была в другом.

А в первом уроке спалился, я заметил подготовленный текст урока :D

:) Есть такое... но это было только в начале, после нескольких абзацев, перестал это делать.

Аватар пользователя Neirol

Объяснять терминологию не обязательно, можно просто правильно выразиться и все.

Написал программу? Проверь на ошибки. Исправил ошибки? Проверь еще раз. Нет ошибок? Ты плохой программист!<br /><br />https://prograph.ru/ - видео уроки по программированию в разных средах, а также справочники, программы и новости.<br />

Страницы