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

boldusev 27.11.2012 19:06

приравнивания радиуса окружности к объекту на сцене
 
Помогите новенькому советом.
Задача такова:
1) Нарисовать объект и добавить на сцену;
2) Приравнять радиус к объекту (если мы увеличиваем радиус, то и объект увеличивается).
Создал 2 класса
Код AS3:

package 
{
        import flash.display.Shape;
        import flash.display.Sprite;
        import flash.events.Event;
 
        /**
        * ...
        * @author Zik
        */

        public class Main extends Sprite
        {
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
                        var ball_mc:ball = new ball();
                        addChild (ball_mc);
                        trace (ball_mc, "rrr")
                        ball_mc.radius = 100;
                        trace (ball_mc.radius);
                        trace (ball_mc.diam);
 
 
                }
 
        }
 
}

и
Код AS3:

package  
{
        import flash.display.MovieClip;
        import flash.display.Shader;
        import flash.display.Shape;
        import flash.events.Event;
 
        /**
        * ...
        * @author Zik
        */

        public class ball extends MovieClip
        {
                private var _radius:Number;
                private var _diam:Number;
                private var circle:Shape;
 
 
                public function ball()
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event=null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
 
                        circle = new Shape ();
                        circle.graphics.lineStyle (30, 0x00FFFF);
                        circle.graphics.drawCircle(500, 50, 50);
                        addChild (circle);
 
                        //_diam = (Number)circle.x;
 
                }
 
                public function get radius():Number
                {
                        return _radius;
                }
 
                public function set radius(value:Number):void
                {
                        _radius = value;
                        _diam = _radius / 2;
 
                }
 
                public function get diam():Number
                {
                        return _diam;
                }
 
                public function set diam(value:Number):void
                {
                        _diam = value;
                        //_diam = Number(circle);
                }
 
 
 
 
 
        }
 
}

С начало думал в сеттере их приравнять, но не вышло. Потом после добавления на сцену, все равно без результатов. Даже пробовал при создании объекта впихнуть радиус (ну зеленый я ещё в этом деле).
Подскажите, или дайте ориентировку. Спасибо.

AlexLucas 27.11.2012 19:18

Ну так после того как задали радиус , надо перерисовать круг в ball, он сам собой не перерисуется.

Hauts 27.11.2012 19:34

Код AS3:

_diam = _radius / 2;

Диаметр = радиус делить на два?

Добавлено через 7 минут
Main.as:
Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
 
        /**
        * ...
        * @author Hauts
        */

        public class Main extends Sprite
        {
                private var _ball:Ball;
                public function Main()
                {
                        addEventListener(Event.ADDED_TO_STAGE, onAdded);
                }
 
                private function onAdded(e:Event):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, onAdded);
                        _ball = new Ball();
                        _ball.x = _ball.y = 100
                        addChild(_ball)
 
                        stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
 
                        mouseMoveHandler(null)
                }
 
                private function mouseMoveHandler(e:MouseEvent):void
                {
                        _ball.diameter = (stage.mouseX - _ball.x) / 2
                }
 
        }
 
}

Ball.as:
Код AS3:

package  
{
        import flash.display.Graphics;
        import flash.display.Shape;
        import flash.display.Sprite;
 
        /**
        * ...
        * @author Hauts
        */

        public class Ball extends Sprite
        {
                private var _shape:Shape;
                private var _radius:Number;
                private var _diameter:Number
                public function Ball(diameter:Number = 10)
                {
                        super();
 
 
                        _shape = new Shape()
                        addChild(_shape)
 
                        diameter = diameter
                }
 
                private function render():void
                {
                        var gr:Graphics = _shape.graphics;
                        gr.clear();
                        gr.lineStyle(1)
                        gr.beginFill(0xFF0000);
                        gr.drawCircle(0, 0, _radius);
                        gr.endFill()
                }
 
                public function set radius(value:Number):void {
                        _radius = value;
                        _diameter = _radius * 2;
                        render();
                }
                public function set diameter(value:Number):void {
                        _diameter = value;
                        _radius = value / 2
                        render();
                }
                public function get radius():Number {
                        return _radius
                }
                public function get diameter():Number {
                        return _diameter
                }       
        }
 
}


boldusev 28.11.2012 01:09

Большое спасибо.


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

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