Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Работа с несколькими объектами (http://www.flasher.ru/forum/showthread.php?t=209645)

Wormhole 03.12.2014 19:18

Работа с несколькими объектами
 
Здравствуйте. Мне необходимо создать несколько слушателей событий для объектов, которые вызывают схожие функции, работающие с данными объектами. Как это можно осуществить? Я пробовал через массив объектов, но для его элементов нельзя выполнять методы MovieClip

Gerbert 03.12.2014 19:34

Объясните то же самое, но обычными словами. Что Вы хотите сделать, какие у Вас объекты?

Wormhole 03.12.2014 20:14

Цитата:

Сообщение от Gerbert (Сообщение 1175772)
Объясните то же самое, но обычными словами. Что Вы хотите сделать, какие у Вас объекты?

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

КорДум 03.12.2014 20:22

Цитата:

но для его элементов нельзя выполнять методы MovieClip
Код AS3:

(arr[i] as MovieClip).x = 10;


Wormhole 03.12.2014 20:41

Цитата:

Сообщение от КорДум (Сообщение 1175774)
Код AS3:

(arr[i] as MovieClip).x = 10;


Ого, спасибо, а я и не знал об операторе as

Gerbert 03.12.2014 20:44

Код AS3:

package {
 
import flash.display.Graphics;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.MouseEvent;
 
public class Main extends Sprite {
    private static  const NUM_RECT: int = 5;
 
    private var _allRects: Array;
    private var _circle: Shape;
 
    public function Main() {
      this._allRects = [];
 
        var rect: Sprite;
        const STAGE_WIDTH: int = super .stage.stageWidth;
        const STAGE_HEIGTH: int = super .stage.stageHeight;
 
        for( var i: int = 0; i < NUM_RECT; i++ ){
            rect = this.createRect( 50, 50, 0xcccccc );
            rect.x = STAGE_WIDTH * Math.random( );
            rect.y = STAGE_HEIGTH * Math.random( );
            super .addChild( rect );
 
            rect.addEventListener( MouseEvent.CLICK, rect_mouseClickHandler );
            this._allRects[i] = rect;
        }
 
        this._circle = this.createCircle( 10, 0x000000 );
        super .addChild( this._circle );
    }
 
    private  function rect_mouseClickHandler( event: MouseEvent ): void{
        var rect: Sprite = event.target as Sprite;
        this._circle.x = rect.x;
    }
 
    private  function createCircle( radius: int, color: uint ): Shape{
        var circle: Shape = new Shape( );
        var g: Graphics = circle.graphics;
        g.beginFill( color );
        g.drawCircle( 0, 0, radius );
        g.endFill( );
 
        return circle;
    }
 
    private function createRect( width: int, height: int, color: uint ): Sprite{
        var rect: Sprite = new Sprite( );
        var g: Graphics = rect.graphics;
        g.beginFill( color );
        g.drawRect( 0, 0, width, height );
        g.endFill( );
 
        return rect;
    }
}
}


in4core 03.12.2014 21:09

Цитата:

Ого, спасибо, а я и не знал об операторе as
Может рестрикт мощный стоит, у меня и без as работает.

Wormhole 03.12.2014 21:58

Цитата:

Сообщение от КорДум (Сообщение 1175774)
Код AS3:

(arr[i] as MovieClip).x = 10;


А как тогда узнать, с каким именно объектом произошло событие (например, клик)?

in4core 03.12.2014 22:05

e.currentTarget

Wormhole 03.12.2014 22:06

Цитата:

Сообщение от in4core (Сообщение 1175784)
e.currentTarget

Я пробовал, он пишет, что нет доступа к несуществующему объекту


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

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