Форум 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=179266)

NastyaR 11.05.2012 00:04

Проблема с отскоком объекта
 
Прямоугольник размером 1366на768, объект должен хаотично перемещаться по нему и отскакивать от границ. с математикой не в ладах, может кто-нибудь сталкивался с подобным)
Вот пример, но он для круга..может можно его как-то переделать. Заранее большое спасибо)
Код AS1/AS2:

 onClipEvent(load){
        var k = (dist - R) /  R;
 _x -= dx*k;
 _y -= dy*k;
v = 5;
rBall = _width / 2;
angle = random(360) * Math.PI / 180;
vx =  v*Math.sin(angle);
vy = -v*Math.cos(angle);
xc = 531;
yc = 210;
R = 700 - rBall;
function fly() {
_x += vx;
_y += vy;
 var dx = _x - xc;
 var dy = _y - yc;
 var dist = Math.sqrt(dx*dx + dy*dy);
 if ( dist >= R ) {
        n1x = dx / dist;
        n1y = dy / dist;
        vn = vx*n1x + vy*n1y;
        vx -= 2*vn*n1x;
        vy -= 2*vn*n1y;
        updateAfterEvent();
 }
}
setInterval ( fly, 20 );
 }


Hauts 12.05.2012 13:37

Код AS1/AS2:

var stageWidth = 1024;
var stageHeight = 768;
var speed = 10;
 
var ball = createBall();
 
var randomStartAngle = Math.random() * Math.PI * 2;
ball.vx = Math.cos(randomStartAngle);
ball.vy = Math.sin(randomStartAngle);
ball._x = stageWidth / 2;
ball._y = stageHeight / 2;
 
function createBall() {
        var d = this.getNextHighestDepth();
        var ballInstance = this.createEmptyMovieClip("ball_" + d, d);
        ballInstance.beginFill(0x000000,100);
        ballInstance.moveTo(-10,-10);
        ballInstance.lineTo(10,-10);
        ballInstance.lineTo(10,10);
        ballInstance.lineTo(-10,10);
        ballInstance.lineTo(-10,-10);
        ballInstance.endFill();
        return ballInstance;
}
this.onEnterFrame = function() {
        var newPosX = ball._x + ball.vx * speed;
        var newPosY = ball._y + ball.vx * speed;
        if (newPosX < 0 || newPosX > stageWidth) {
                ball.vx *= -1;
        }
        if (newPosY < 0 || newPosY > stageHeight) {
                ball.vy *= -1;
        }
        ball._x += ball.vx * speed;
        ball._y += ball.vy * speed;
};



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

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