Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Прыгающий мяч (http://www.flasher.ru/forum/showthread.php?t=112480)

StachelDraht 29.05.2008 11:03

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


Чес скажу, на форме рылся долго. Понял что надо юзать hitTest. Но как его использовать, не понял.


Помогите пожалуйста.
Спасибо!

iNils 29.05.2008 11:25

Для плоской поверхности достаточно определять координаты мяча и корректировать их.

StachelDraht 29.05.2008 11:56

Вложений: 1
а если мне надо что бы шарик ударялся только от определенного куска поверхности. Незнаю как объяснить.
Короче на картинке, есть шарик (синий) и ящик (красный). Ящик двигается в лево и в право кнопками LEFT и RIGHT.
Короче игра где юзер пытается отбить мячик этим самым ящиком.
Как быть в таком случае.

StachelDraht 29.05.2008 12:18

никак не врубаюсь
Код:

ball.onEnterFrame = function() {
        if (ball._y != box._y){
                ball._y += 10;
        }else if
                (ball._y == box._y) {
                ball._y -= 10;
                }
        };


Alex_beginner 29.05.2008 14:08

Чтобы определить, пересекаются ли два клипа, метод hitTest() необходимо задействовать в следующей форме:
clip1.hitTest(clip2),
здесь clip1 и clip2 — клипы, проверку коллизии которых нужно провести.
В качестве результата метод hitTest() возвращает булеву величину true, если клипы имеют общие точки, и false, если они не перекрываются.
В идеале факт пересечения двух клипов нужно считать состоявшимся, если у них есть хотя бы по одной заполненной точке, которые имеют одинаковые глобальные координаты. Увы, но проверить коллизию с такой точностью можно далеко не всегда. Для этого пришлось бы последовательно перебрать значительное число точек, что недопустимо с позиции времени выполнения кода. Поэтому метод hitTest() сравнивает не положения заполненных точек двух клипов, а лишь их граничные координаты (получить которые можно, используя метод getBounds()). Это означает, что факт коллизии будет подтвержден не тогда, когда объекты внутренней структуры двух клипов действительно перекрывают друг друга, а тогда, когда пересекаются области, ограниченные описанными вокруг них прямоугольными рамками.

В вашем коде проверяется лишь высота двух клипов (прмым сравнением свойства _y клипов). А как же быть если шарик будет падать не на площадку? Подумайте и используйте метод hitTest.

lexa2000lexa 29.05.2008 14:57

http://silin.fatal.ru/#AS/balls

StachelDraht 29.05.2008 15:34

Огромное спасибо за объяснения и ссылку.
Буду думать дальше!:)

StachelDraht 29.05.2008 16:58

пока что доперло.
Спасибо!
Код:

box.onEnterFrame = function() {
        if (Key.isDown(Key.LEFT)){
        this._x -= 25;
} else
        if(Key.isDown(Key.RIGHT)) {
        this._x += 25;
}
};

ball.onEnterFrame = function() {
        ball._y += 10;
};

function hit() {
        if (box.hitTest(ball)) {
                ball._y -=100;
        }
};
setInterval(this, "hit", 100);


Alex_beginner 29.05.2008 17:10

Млин! Да че ж Вы все пишете на клипах. Это некрасиво и не читабельно. Делайте динамику на главной временной шкале.

Сделайте движение мяча в одном обработчике _root.onEnterFrame.
События нажатия клавиш onKeyDown сделайте тоже на главной временной шкале но не в onEnterFrame.

Код:

Key.addListener(_root);
_root.onKeyDown = function(code):Void
{
        trace(Key.getCode());
}


StachelDraht 30.05.2008 15:01

Не работает.
Код:

Key.addListener(box);
_root.onKeyDown = function():Void
{
        if (Key.LEFT){
                box._x -= 25;
        } else
        if (Key.RIGHT) {
                box._x += 25;
        }
};

и второй вопрос. Как заставить мяч отскакивать от поверхности в произвольную сторону по оси х.
И как сделать что бы не просто перепрыгивал на координату 150, а летел до нее.
Сейчас:
Код:

ball._y -= 150;


Часовой пояс GMT +4, время: 01:12.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.