Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Передвижение всех элементов массива по .x и .y координатам. (http://www.flasher.ru/forum/showthread.php?t=147500)

Lyso 06.12.2010 12:44

Передвижение всех элементов массива по .x и .y координатам.
 
Продолжаю улучшать урок, сейчас у меня проблема с передвижением всех шаров вверх и вниз.
Написал функцию:
Код AS3:

public function reportKeyUp() {
        for (var i=0; i<allBalls.length; i++) {
                var port = allBalls[i];
                port.y -=  10;
        }
}

Включил функцию и вроде должно всё работать, но мячи подлетают при нажатии кнопки мыши, а не "KeyUp". Что делать? И надо ли вообще использовать цикл для поднятия всех шаров?

iNils 06.12.2010 13:00

Цитата:

но мячи подлетают при нажатии кнопки мыши, а не "KeyUp".
А причем тут код выше? Значит подписались на клавиатуру, а не на мышь.
Цитата:

И надо ли вообще использовать цикл для поднятия всех шаров?
Если скорость у всех шаров одна, то можно поместить их в контейнер и поднимать его.

Lyso 06.12.2010 13:02

Каким образом, не доскажите? Скорость одна, а как засунуть все элементы массива в контейнер?

iNils 06.12.2010 13:05

Это зависит от того, как вы их создавали. Либо программно, либо на сцене Flash IDE.

Lyso 06.12.2010 13:12

Могу скинуть исходник:
http://*****************/files/6otbhyx0m

iNils 06.12.2010 13:20

1. Файлы надо выкладывать на форум, а не туда где постоянно пишут "ВНИМАНИЕ! Вы исчерпали лимит подключений! Попробуйте повторить через XX минут(ы). "
2. У меня CS3, поэтому, если у вас fla версии выше, то придется ждать кого-нибудь другого.

Lyso 06.12.2010 13:26

А как кинуть на форум? Вот код двух файлов:
1 (balls.fla)
Код AS3:

import flash.display.Sprite; 
import flash.text.*;
 
stage.addEventListener(MouseEvent.CLICK,addBall);
 
function addBall(e:MouseEvent):void{
        var ball:Ball=new Ball();
        addChild(ball);
        ball.x=mouseX;
        ball.y=mouseY;
    myText.text= Ball.allBalls.length.toString(); //Вывод длины массива в текст.
}

2 (Ball.as)
Код AS3:

package 
{
        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.text.*;
        import flash.events.MouseEvent;
        import flash.geom.ColorTransform;
        import flash.events.MouseEvent;
        import flash.ui.Keyboard;
        import flash.events.KeyboardEvent;
 
        public class Ball extends MovieClip
        {
                public static var allBalls:Array = [];
                var xspeed:Number = -10 + Math.random() * 20;
                var yspeed:Number = -5;
                var grav:Number = 1;
                var radius:Number;
                public var up:Boolean = false;
                public var down:Boolean = false;
                public var left:Boolean = false;
                public var right:Boolean = false;
 
                public function Ball()
                {
                        var colorTransform:ColorTransform = new ColorTransform();
                        colorTransform.alphaMultiplier = 1;
                        colorTransform.redOffset = Math.random() * 4 + 7;
                        colorTransform.greenMultiplier = Math.random() * 3;
                        transform.colorTransform = colorTransform;
                        scaleX = scaleY = Math.random() * 0.5 + 0.5;
                        radius = width / 2;
                        allBalls.push(this);
                        addEventListener(Event.ENTER_FRAME,onFrame);//Слушатель событый, в каждый кадр.
                }
 
                }
                public function onFrame(e:Event):void
                {
                        yspeed +=  grav;
                        xspeed * +0.9;
                        y +=  yspeed;
                        x +=  xspeed;
                        rotation = x * 2;
 
                        hitBall();
                        hitStage();
                }
 
                public function hitBall():void
                {
                        for (var i=0; i<allBalls.length; i++)
                        {
                                var curBall = allBalls[i];
                                var minDist = curBall.radius + radius;
                                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);
                }
 
                public function hitStage():void
                {
                        if (x > 300 - radius)
                        {
                                x = 300 - radius;
                                xspeed = 0;
                        }
                        if (x < radius)
                        {
                                x = radius;
                                xspeed = 0;
                        }
                        if (y > 300 - radius)
                        {
                                y = 300 - radius;
                                yspeed =  -  yspeed * 0.2;
                                xspeed = 0;
                        }
                }
        }
}

Как сделать чтобы весь массив при нажатии на стрелки поднимался или двигался по сторонам? То есть координаты .y и .x...

medvedya2 06.12.2010 13:46

прочитайте:
http://help.adobe.com/ru_RU/ActionSc...0204-7e54.html

http://help.adobe.com/ru_RU/AS3LCR/F...ventListener()

http://help.adobe.com/ru_RU/AS3LCR/F...oardEvent.html

Lyso 06.12.2010 15:12

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

medvedya2 06.12.2010 15:22

Вы хотите сделать что шары на кнопку клавиатуры вниз спускались, а на кнопку верх поднимались?


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

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