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

act 18.09.2012 09:07

Квадратная область
 
Всем доброго времени!
Уважаемые знатоки пожалуйста помогите решить задачу.

Есть код:

Код AS3:

package {
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.display.DisplayObject;
import flash.display.Shape;
import flash.events.*;
 
    public class Main extends Sprite {
 
        private var offsetX:int,
                    offsetY:int,
                    displayObject:DisplayObject;
 
        public function Main():void {
            this.init();
        }
 
        private function init():void {
 
            var rectDrag:Sprite = new Sprite();
 
            rectDrag.graphics.beginFill(0x000000);
            rectDrag.graphics.drawRect(0, 0, 45, 45);
            rectDrag.graphics.endFill();
 
            var rect:Sprite = new Sprite();
 
            rect.graphics.lineStyle(1, 0x006600);
            rect.graphics.drawRect(0, 0, 400, 400);
            rect.graphics.endFill();
 
            var sprite:Sprite = new Sprite();
 
            sprite.y = 300;
            sprite.x = 50;
 
            sprite.rotationY = -43;
            sprite.rotationX = -43;
            sprite.rotationZ = -36;
 
            rect.addChild(rectDrag);
 
            rectDrag.addEventListener(MouseEvent.MOUSE_DOWN, this.startd);
            rectDrag.addEventListener(MouseEvent.MOUSE_UP, this.stopd);
 
            sprite.addChild(rect);
            super.addChild(sprite);
        }
 
        private function startd(event:MouseEvent):void {
            this.displayObject = DisplayObject(event.target);
 
            this.offsetX = event.stageX - this.displayObject.x;
            this.offsetY = event.stageY - this.displayObject.y;
 
            super.stage.addEventListener(MouseEvent.MOUSE_MOVE, dragg);
        }
 
        private function stopd(event:MouseEvent):void {
            super.stage.removeEventListener(MouseEvent.MOUSE_MOVE, this.dragg);
        }
 
        private function dragg(event:MouseEvent):void {
            this.displayObject.x = event.stageX - this.offsetX;
            this.displayObject.y = event.stageY - this.offsetY;
 
            event.updateAfterEvent();
        }
    }
}

Неправильно работает перемещение по области...
Помогите в чем проблема?

Если убрать:

Код AS3:

sprite.rotationY = -43;
sprite.rotationX = -43;
sprite.rotationZ = -36;

То все нормально двигается.

Уже какой день не могу решить проблему.
Как вообще правильно нужно сделать?
Будьте так любезны подскажите, ка правильно нужно сделать.

Hauts 18.09.2012 13:12

Код AS3:

import flash.display.Sprite;
import flash.display.MovieClip;
import flash.display.DisplayObject;
import flash.display.Shape;
import flash.events.*;
 
 
var offsetX:int,offsetY:int,displayObject:DisplayObject;
 
var rectDrag:Sprite = new Sprite();
 
rectDrag.graphics.beginFill(0x000000);
rectDrag.graphics.drawRect(0, 0, 45, 45);
rectDrag.graphics.endFill();
 
var rect:Sprite = new Sprite();
 
rect.graphics.lineStyle(1, 0x006600);
rect.graphics.drawRect(0, 0, 400, 400);
rect.graphics.endFill();
 
var sprite:Sprite = new Sprite();
 
sprite.y = 300;
sprite.x = 50;
 
sprite.rotationY = -43;
sprite.rotationX = -43;
sprite.rotationZ = -36;
 
rect.addChild(rectDrag);
 
rectDrag.addEventListener(MouseEvent.MOUSE_DOWN, this.startd);
addEventListener(MouseEvent.MOUSE_UP, this.stopd);
 
sprite.addChild(rect);
super.addChild(sprite);
 
 
function startd(event:MouseEvent):void {
        this.displayObject = DisplayObject(event.target);
        this.offsetX = rectDrag.mouseX;
        this.offsetY = rectDrag.mouseY;
        super.stage.addEventListener(MouseEvent.MOUSE_MOVE, dragg);
}
 
function stopd(event:MouseEvent):void {
        super.stage.removeEventListener(MouseEvent.MOUSE_MOVE, this.dragg);
}
 
function dragg(event:MouseEvent):void {
        rectDrag.x = sprite.mouseX - offsetX;
        rectDrag.y = sprite.mouseY - offsetY;
        event.updateAfterEvent();
}

Для ФД подправите сами :)

act 18.09.2012 18:27

Квадратная область
 
Красава все работает =)

Код AS3:

package {
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.display.DisplayObject;
import flash.display.Shape;
import flash.events.*;
 
        public class Main extends Sprite {
                private var sprite:Sprite = new Sprite(),
                                        rectDrag:Sprite = new Sprite(),
                                        rect:Sprite = new Sprite();
                private var displayObject:DisplayObject;
 
                public function Main():void {
                        this.init();
                }
 
                private function init():void {
 
                        this.rectDrag.graphics.beginFill(0x000000);
                        this.rectDrag.graphics.drawRect(0, 0, 45, 45);
                        this.rectDrag.graphics.endFill();
 
                        this.rect.graphics.lineStyle(1, 0x006600);
                        this.rect.graphics.drawRect(0, 0, 400, 400);
                        this.rect.graphics.endFill();
 
                        this.sprite.y = 300;
                        this.sprite.x = 50;
 
                        this.sprite.rotationY = -43;
                        this.sprite.rotationX = -43;
                        this.sprite.rotationZ = -36;
 
                        this.rect.addChild(this.rectDrag);
 
                        this.rectDrag.addEventListener(MouseEvent.MOUSE_DOWN, this.startd);
                        this.rectDrag.addEventListener(MouseEvent.MOUSE_UP, this.stopd);
 
                        this.sprite.addChild(this.rect);
                        super.addChild(this.sprite);
                }
 
                private function startd(event:MouseEvent):void {
                        this.displayObject = DisplayObject(event.target);
                        super.stage.addEventListener(MouseEvent.MOUSE_MOVE, this.dragg);
                }
 
                private function stopd(event:MouseEvent):void {
                        super.stage.removeEventListener(MouseEvent.MOUSE_MOVE, this.dragg);
                }
 
                private function dragg(event:MouseEvent):void {
                        this.displayObject.x = this.sprite.mouseX - 20;
                        this.displayObject.y = this.sprite.mouseY - 20;
                        if (displayObject.x < 0) {
                displayObject.x = 0;
            }
            if (displayObject.y < 0) {
                displayObject.y = 0;
            }
            if (displayObject.x > 355) {
                displayObject.x = 355;
            }
            if (displayObject.y > 355) {
                displayObject.y = 355;
            }
                        event.updateAfterEvent();
                }
        }
}

Чтобы было =)

http://www.cyberforum.ru/actionscrip...ml#post3463174


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

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