Просмотр полной версии : Управление мовиклипом как целым
Всем привет
Помогите
Создал я Мувиклип из нескольких мовиклипов
Назвал я его D2.
Создал небольшой проект по его управлению.
Когда я запускаю проект, то я не могу двигать D2 как целым.
Получается двигать только по частям.
Не могу понять в чем моя ошибка?
С уважением
Александр
import flash.display.MovieClip;
import flash.display.DisplayObject;
import flash.events.MouseEvent;
import flash.events.Event;
//import flash.ui.Mouse;
//import fl.controls.DataGrid;
//import fl.controls.Button;
var i,k:int;
var Kol_Dachikov=1;
var Zvz:DisplayObject;
var arr:Array = new Array();
var DvMouse:int=0;
var NDatch:int=0;
var str1:String;
stage.addEventListener(MouseEvent.MOUSE_DOWN, DvigStart);
stage.addEventListener(MouseEvent.MOUSE_UP, DvigStop);
function DvigStart(e:MouseEvent){
DvMouse=1;
if((e.target.name!=null))
(e.target as MovieClip).startDrag();
}
function DvigStop (e:MouseEvent){
DvMouse=0;
{(e.target as MovieClip).stopDrag();}
}
undefined
09.10.2017, 16:39
а имя мувиклипу назначено?
ZackMercury
09.10.2017, 16:53
Уберите имя у частей, и дайте имя целому.
undefined
09.10.2017, 17:03
и еще mouseChildren мувиклипу надо в false выставить
ZackMercury
09.10.2017, 17:15
Не обязательно, у него перетаскиваются только те, которые имеют имя.
Всем спасибо за оперативность
Буду пробовать
undefined
09.10.2017, 17:44
Не обязательно, у него перетаскиваются только те, которые имеют имя.
Потяни за красный квадрат
test.swf
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
container = new Sprite();
container.graphics.beginFill(0x0FF00, 1);
container.graphics.drawRect(0, 0, 100, 100);
container.name = "cont";
var sp:Sprite = new Sprite();
sp.graphics.beginFill(0xFF0000, 1);
sp.graphics.drawRect(0, 0, 50, 50);
container.alpha = 0.5;
container.addChild(sp);
addChild(container);
//container.mouseChildren = false;
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMD);
stage.addEventListener(MouseEvent.MOUSE_UP, onMU);
}
private function onMD(e:MouseEvent):void
{
if (e.target.name!=null)
e.target.startDrag();
}
private function onMU(e:MouseEvent):void
{
e.target.stopDrag();
}
ZackMercury
09.10.2017, 18:01
А, точно, им же при отсутствии присваиваются номера)
Еще раз всем спасибо.
Но у меня следующая задача
Я должен двигать этим мувиклипом как целым.
И этот мувиклип состоит из компонентов типа: "ComboBox", которым я должен управлять
Поэтому имена я должен присваивать
С уважением
undefined
10.10.2017, 12:02
проще всего не слушать все события стейджа, а слушать все события твоего мувиклипа:
//container - твой мувиклип
...
container.addEventListener(MouseEvent.MOUSE_DOWN, onMD);
container.addEventListener(MouseEvent.MOUSE_UP, onMU);
function onMD(e:MouseEvent):void {
container.startDrag();
}
function onMU(e:MouseEvent):void {
container.stopDrag();
}
спасибо
Буду пробовать
Добавлено через 40 минут
У меня в библиотеке есть Mклип "D1".
Пытаюсь сделать как Вы сказали.
Я его добавляю на сцену как контейнер .
Получаю ошибку.
container1:Sprite = new Sprite();
container1.addChild(D1);
Заранее спасибо
undefined
10.10.2017, 13:10
еще раз container - это твой мувиклип, надо положить его на сцену,дать ему имя(D1 либо любое другое) и навесить на него слушатели:
D1.addEventListener(MouseEvent.MOUSE_DOWN, onMD);
D1.addEventListener(MouseEvent.MOUSE_UP, onMU);
и все.Не надо создавать никаких контейнеров.
Не получилось
Сделал как Вы сказали
На сцене MC . Дал ему имя D2.
Все равно двигается по частям
undefined
10.10.2017, 14:46
Выложи код целиком
import flash.display.MovieClip;
import flash.display.DisplayObject;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.Sprite;
//import flash.ui.Mouse;
//import fl.controls.DataGrid;
//import fl.controls.Button;
var i,k:int;
var Kol_Dachikov=1;
var Zvz:DisplayObject;
var arr:Array = new Array();
var DvMouse:int=0;
var NDatch:int=0;
var str1:String;
D2.addEventListener(MouseEvent.MOUSE_DOWN, DvigStart);
D2.addEventListener(MouseEvent.MOUSE_UP, DvigStop);
//stage.addEventListener(MouseEvent.MOUSE_DOWN, DvigStart);
//stage.addEventListener(MouseEvent.MOUSE_UP, DvigStop);
function DvigStart(e:MouseEvent):void{
DvMouse=1;
if((e.target.name!=null))
e.target.startDrag();
}
function DvigStop (e:MouseEvent){
DvMouse=0;
{(e.target as MovieClip).stopDrag();}
}
undefined
10.10.2017, 15:45
у тебя:
function DvigStart(e:MouseEvent):void{
DvMouse=1;
if((e.target.name!=null))
e.target.startDrag();
}
function DvigStop (e:MouseEvent){
DvMouse=0;
{(e.target as MovieClip).stopDrag();}
}
тогда как у меня:
function onMD(e:MouseEvent):void {
container.startDrag();
}
function onMU(e:MouseEvent):void {
container.stopDrag();
}
что в твоем случае должно выглядить как:
function onMD(e:MouseEvent):void {
D2.startDrag();
}
function onMU(e:MouseEvent):void {
D2.stopDrag();
}
Спасибо
класс
Добавлено через 44 минуты
Еще вопрос
А можно ли сделать так, чтоб я из библиотеки добавлял на сцену несколько сложных Мклипов, который состоит из нескольких МС и чтоб я мог каждым управлять как одним целым ?
Просто передо мной такая задача поставлена.
С уважением
Добавлено через 17 часов 48 минут
Всем привет
Я понимаю, что немного поднадоел своей бестолковостью, но мне действительно нужна помощь.
У меня следующая задача:
в библиотеке создан сложный МС, который состоит из др МС и из компонентов.
Я должен из библиотеки добавить любое количество МС на сцену . Затем разместить их на сцене как удобно.
Затем в каждом МС на сцене через компоненты внутри каждого МС изменить свойства каждого МС.
У меня все вроде бы получается кроме движения каждым МС как целым.
Если кто знает как подскажите
С уважением
Добавлено через 41 час 37 минут
Всем спасибо
Добавлено через 67 часов 45 минут
Я начал разбираться со своим примером и понял в чем ошибался.
Я на сцене создаю экземпляры клипов:
for(i=0;i<Kol_Dachikov;i++)
{
var Zv:MovieClip = new Datchik;
Zv.name="ss"+i;
Zv.x=100+i*10;
Zv.y=150+i*10;
addChild(Zv);
arr.push(Zv);
trace ("Name="+Zv.name);
}
}
где их имена :ss0,ss1,...
Затем я на сцене слушаю событие:
stage.addEventListener(MouseEvent.MOUSE_DOWN, DvigStart);
и по событию хочу обратиться к клипу по имени:
function DvigStart(e:MouseEvent){
DvMouse=1;
if(e.target.name==ss0)
{
e.target.startDrag();
}
}
и получаю ошибку в строке: if(e.target.name==ss0).
Монтажный кадр 1, слой "Слой 1", кадр 1, строка 35 1120: Обращение несуществующего свойства ss0.
Вопрос: могу ли я обратиться к созданному клипу по имени ?
Спасибо .
Жесть... Ообычно проблема как раз в том, чтобы управлять частями клипа... Тут - наоборот :)
Когда сочувствуют это приятно, а решение где ?
ZackMercury
18.10.2017, 13:42
Свойство name класса MovieClip - строка.
Привет ZackMercury
Я понял, что строка
Но не могу понять , что дальше делать
ZackMercury
23.10.2017, 18:54
Почитать книжку по AS3.
ActionScript 3.0. Подробное руководство
Судя по всему, у вас нет базы для того, чтобы вообще код писать. Эта книжка даст общее представление о языке, и как устроены его элементы.
Строка(тип String) в AS3 записывается в одинарных или двойных кавычках, и представляет собой простой текст.
спасибо за внимание
Согласен надо прочитать.
А база у меня есть только в другом языке "LabVIEW".
И переключиться с логики одного языка на логику другого довольно проблематично.
С уважением
Александр.
caseyryan
24.10.2017, 10:59
if(e.target.name == "ss0") // просто добавить кавычки
{
e.target.startDrag();
}
Чтобы свойство превратилось в строку, нужно его обрамить в кавычки. В as3 и двойные кавычки и одинарные - равнозначны. Разве в LabVIEW строки не так же обозначаются?
А база у меня есть только в другом языке "LabVIEW".
А для чего, если не секрет, понадобилось перейти в LabVIEW на флеш?
Спасибо
Захотелось расширить познания именно для WEB дизайна.
В LabVIEW я разработал SCADA систему. И увидел что для работы с базой данных необходим мощный компьютер. Особенно если работа по сети.
Поэтому я решил часть задач по работе с базой данных перевести на сайт, где работают PHP и флэш.
Ну это так в 2 словах
С уважением
Добавлено через 52 минуты
Я понемногу разбираюсь.
Я создал в библиотеке сложный мувиклип состоящий из несколько простых мувиклипов с именами(а1, а2,...).
Вставил сложный МС на сцену:
var Zv:MovieClip = new DDDD;
Zv.name="ss0";
Zv.x=100+i*10;
Zv.y=150+i*10;
addChild(Zv);
Дальше слушаю сцену :
stage.addEventListener(MouseEvent.MOUSE_DOWN, DvigStart);
И в функции DvigStart:
trace(e.target.name);
выводятся имена МС (а1, а2,...).
А сложного МС с именем "ss0" программа не видит.
А мне надо получить доступ к МС "ss0".
Вот что у меня не получается.
Еще раз извините за беспокойство
С уважением
caseyryan
24.10.2017, 14:06
Флеш это не лучший выбор для веба. Лучше пока не поздно переходить на JavaScript. Я бы порекомендовал изучать ReactJS или AngularJS. Можно даже TypeScript, если нужна типизация
Флеш плеер уже почти во всех браузерах отключен по умолчанию
А сложного МС с именем "ss0" программа не видит.
А если слушатель добавить не так:
stage.addEventListener(MouseEvent.MOUSE_DOWN, DvigStart);
а так:
stage.addEventListener(MouseEvent.MOUSE_DOWN, DvigStart, true);
?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.