PDA

Просмотр полной версии : как прописать кнопку play для мувика buket_mc


Nailya
29.05.2013, 16:08
Всем привет!

У меня ролик: букет, который крутится с помощью движка(movieClip:mySlider) или мышкой по букету(movieClip:buket_mc)

Нужно еще кнопку play(button:play_mc) сделать как альтернативу,чтобы при нажатии крутился букет и , вроде ничего сложного, но я не пойму куда мне его прописать - в код, где mySlider или в код, где монтажный кадр,куда не вставишь везде ошибку выдает.

movieClip:sliderTrack - это нарисованная шкала для движка
movieClip:sliderKnob - это нарисованная кнопка,чтобы тянуть за нее по шкале
movieClip:mySlider - sliderTrack+sliderTrack(контейнер) и as для движка
movieClip:buket_mc - фотографии букета, добавленные в кадры

Вот код для движка:

var knobWidth:Number = sliderKnob.width;
var trackWidth:Number = sliderTrack.width;
var trackX:Number = sliderTrack.x;
var boundWidth = trackWidth - knobWidth;
var boundsRect:Rectangle = new Rectangle(trackX, 0, boundWidth, 0);

sliderKnob.addEventListener(MouseEvent.MOUSE_DOWN,startDragging);
mouse_over.addEventListener(MouseEvent.MOUSE_DOWN,startDragging);
this.addEventListener(MouseEvent.MOUSE_MOVE,update);
function startDragging(event:MouseEvent) : void{
sliderKnob.startDrag(false,boundsRect);
}
mouse_over.addEventListener(MouseEvent.MOUSE_UP,stopDragging);
sliderKnob.addEventListener(MouseEvent.MOUSE_UP,stopDragging);
play_mc.addEventListener(MouseEvent.MOUSE_MOVE,update);

function stopDragging(event:MouseEvent){
sliderKnob.stopDrag();
}
function update(e:MouseEvent):void{
this.sliderKnob.gotoAndStop(mouseX);
}

Основной код для того, чтобы букет крутился с помощью движка, находится на основной сцене


Добавлено через 8 минут
извините,там где смайлик - слово не lay_mc(),а play_mc...что-то не загрузился код как надо, вторая попытка:



var knobWidth:Number = sliderKnob.width;
var trackWidth:Number = sliderTrack.width;
var trackX:Number = sliderTrack.x;
var boundWidth = trackWidth - knobWidth;
var boundsRect:Rectangle = new Rectangle(trackX, 0, boundWidth, 0);

sliderKnob.addEventListener(MouseEvent.MOUSE_DOWN,startDragging);
mouse_over.addEventListener(MouseEvent.MOUSE_DOWN,startDragging);
this.addEventListener(MouseEvent.MOUSE_MOVE,update);
function startDragging(event:MouseEvent) : void{
sliderKnob.startDrag(false,boundsRect);
}
mouse_over.addEventListener(MouseEvent.MOUSE_UP,stopDragging);
sliderKnob.addEventListener(MouseEvent.MOUSE_UP,stopDragging);
play_mc.addEventListener(MouseEvent.MOUSE_MOVE,update);

function stopDragging(event:MouseEvent){
sliderKnob.stopDrag();
}
function update(e:MouseEvent):void{
this.sliderKnob.gotoAndStop(mouseX);
}



Основной код для того, чтобы букет крутился с помощью движка, находится на основной сцене


stop();
buket_mc.stop();
var ind:Number = mySlider.sliderTrack.width/buket_mc.totalFrames;
var sliderValue:uint = mySlider.sliderKnob.x;
addEventListener(Event.ENTER_FRAME, onEnterFrame);
function onEnterFrame(event:Event): void{
sliderValue = mySlider.sliderKnob.x/ind;
buket_mc.gotoAndStop(sliderValue);

}


Добавлено через 1 час 30 минут
Господа, напишите, может я непонятно объяснила, задайте хотя бы наводящий вопрос

NikolyA
29.05.2013, 17:44
ну вот и вешаем на мувик play_mc событие в котором говорим buket_mc.play();

Nailya
29.05.2013, 18:26
не срабатывает, если использую buket_mc.play();

дело в том, что в монтажном кадре всего два кадра:1)preloаder;2)второй основной:1й слой-контент,2й- as , загвостка в том, что все фотки добавлены в мувике buket_mc,а срабатывают только эти два кадра и пишет ошибку TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at button_fla::MainTimeline/onEnterFrame()


play_mc.addEventListener(MouseEvent.CLICK,playF);
stop_mc.addEventListener(MouseEvent.CLICK,stopF);
function stopF(e:MouseEvent) : void{
stop();
}
function playF(e:MouseEvent) : void{
play();
}

NikolyA
29.05.2013, 18:43
function playF(e:MouseEvent) : void{
bucket_mc.play();
}

Nailya
29.05.2013, 21:47
уже писала такЖ все равно выдает ошибку

Добавлено через 6 минут
дело в том,что я не совсем понимаю,где прописывать его, в каком-то определенном мувике

Например, я сделала движок->cоздала movieClip "mySlider" ->в нем создала второй слой для as cкрипта и
прописала в нем код для движка

Как быть с кнопкой play, где мне его код прописывать, в мувике или на основной сцене

Alex Lexcuk
29.05.2013, 22:00
Как быть с кнопкой play, где мне его код прописывать, в мувике или на основной сцене
Надо вообще-то в классах, например в документ классе.

Nailya
29.05.2013, 22:13
я не очень поняла вас, я новичок, что за документ-класс

timm
29.05.2013, 22:30
я не очень поняла вас, я новичок, что за документ-класс
Лучше отделять код от графики и писать на классах, как сказали выше. Документ-класс — основной класс приложения (точка входа программы).

Как быть с кнопкой play, где мне его код прописывать, в мувике или на основной сцене
Пишете код там, где кнопка располагается у вас, чтобы не дописывать пути.
Если кнопка и bucket_mc в разных местах, нужно прописывать к ним пути относительно текущего местоположения.

Nailya
29.05.2013, 22:44
а как теперь привязать этот документ-класс к своему документу

Alex Lexcuk
29.05.2013, 22:46
я не очень поняла вас, я новичок, что за документ-класс
О документ класс это просто супер-пупер штука.
а как теперь привязать этот документ-класс к своему документу
Посмотрите ютуб
https://www.youtube.com/watch?v=6psTWXAebcE

timm
29.05.2013, 22:49
а как теперь привязать этот документ-класс к своему документу
На панели «Properties» есть поле «Class», туда и прописываете.
Рядом есть кнопка (нарисован карандашик), нажав на нее можно выбрать as-файл с описанием вашего класса. Поместите файл рядом с исходником FLA, чтобы не прописывать пакеты.
Название файла соответствует названию класса.

Nailya
29.05.2013, 22:59
сейчас я с горя напьюсь, я совсем запутана(((...

timm
29.05.2013, 23:00
Какие у вас возникают вопросы?

Nailya
29.05.2013, 23:29
у меня в панели свойства нету класса

Добавлено через 3 минуты
мне нужно buket_mc и play_mc экспортировать в ActionScript, чтобы их связать?

Добавлено через 9 минут
нашла класс

timm
29.05.2013, 23:52
мне нужно buket_mc и play_mc экспортировать в ActionScript, чтобы их связать?
Да, следует экспортировать и дать каждому свое имя класса (по сути они будут MovieClip`ами). Затем создавать в документ-классе ваши экземпляры и работать с ними.

Начните с создания вашего документ-класса. Вот минимальный код для этого:
package {

import flash.display.MovieClip;

public class Main extends MovieClip {

public function Main() {
trace("Работает!");
}

}

}
Класс называется Main, значит файл надо назвать Main.as. После того, как будет готов файл, пропишите имя вашего класса в поле, которое вы как раз нашли. Пока вот так.

Alex Lexcuk
30.05.2013, 00:47
Nailya вы можете в том месте где ваш buket_mc не равен null послать своё событие через stage с параметром в качестве buket_mc. И можете отловить это событие в том месте программы где вам будет удобно и затем управлять этим мовиклипом buket_mc.
Вот класс события

package{
import flash.events.*;
public class Событие extends Event{
public var параметр;
public function Событие(тип:String, параметр){
super(тип);
this.параметр = параметр;
}
}
}

В том месте где ваш buket_mc неравен null посылаете через stage

stage.dispatchEvent(new Событие('buket_mcТута',buket_mc));

В том месте где вы им хотите управлять ловите это событие

stage.addEventListener('buket_mcТута',охота);
var buket_mcКлип;
function охота(e:Событие){
buket_mcКлип = e.параметр;
buket_mcКлип.stop();

Видео обзор http://youtu.be/uHDXwgzzmVQ

Nailya
30.05.2013, 12:37
Cоздала документ-класс myPlay
вот этот скрипт у меня работает:

package {

import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.utils.*;

public class myPlay extends MovieClip {

public function myPlay() {

trace("Работает!");
}

}

}



этот скрипт не работает и выдает такую ошибку:TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at myPlay()


package {

import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.utils.*;

public class myPlay extends MovieClip {
var buket = new Buket_mc();

public function myPlay() {
play_mc.addEventListener(MouseEvent.CLICK,playF);
trace("Работает!");
}
function playF(e:MouseEvent) : void{

buket.play();
}
}

}



Добавлено через 7 минут
кнопку play_mc, мувик buket_mc экспортировала в actionscript

и дала классам имена Play_mc и Buket_mc

Добавлено через 18 минут
Alex Lexcuk, у меня сразу возник вопрос:

Событие - это получается класс, то есть как у меня класс myPlay или как в первой ссылке, которую вы мне дали - класс Main? просто у меня путаница в терминалогии

timm
30.05.2013, 13:52
этот скрипт не работает и выдает такую ошибку:TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
На основном таймлайне есть мувиклип с именем «play_mc»?

var buket = new Buket_mc();
Букет создали, а не добавили в список отображения (его там попросту нет).

Nailya
30.05.2013, 14:05
да, есть

кнопку play я создала вот как: нарисовала на сцене -> преобразовала в символ, назвала play_mc ->и дала ему имя экземпляра тоже play_mc

Добавлено через 7 минут
а фото букетов добавлять по счетчику или по имени?

Добавлено через 11 минут
вот так?

var buket = new Buket_mc('image 279.jpg','image 277.jpg');

Добавлено через 12 минут
в этом случае он ругается

C:\Users\Admin\Desktop\myPlay.as, строка 9 1137: Неправильное количество аргументов. Ожидается не более 0.

Добавлено через 20 минут
применить вот такой массив возможно к моему скрипту?
var buket_array = new Array('image 279.jpg','image 277.jpg');

Final Hope
30.05.2013, 14:36
сейчас я с горя напьюсь, я совсем запутана(((...Я тут обратил внимание, что вы уже несколько дней с этим букетом мучаетесь. Может, вам лучше обратиться в раздел "Резюме", где вы могли бы найти человека, который точно сможет заставить крутиться ваш букет во все стороны? И тогда напиваться не придется. :) Или хотя бы выложите исходник, чтобы людям было понятно, что у вас там к чему. :)

Babylon
30.05.2013, 14:50
А сколько аргументов в конструкторе класса Buket_mc? Видимо 0

Nailya
30.05.2013, 14:52
как прикрепить .fla?

Final Hope
30.05.2013, 14:54
Запакуйте всё в архив.

Nailya
30.05.2013, 15:13
http://www.flasher.ru/forum/attachment.php?attachmentid=29592&stc=1&d=1369908679

Nailya
30.05.2013, 15:16
http://www.flasher.ru/forum/attachment.php?attachmentid=29593&stc=1&d=1369908939

Nailya
30.05.2013, 16:34
скажите, где моя ошибка?

Final Hope
30.05.2013, 19:46
Ваш код уж слишком разбросан по кадрам. Вот так будет удобнее, я думаю.

Nailya
30.05.2013, 22:23
офигеть можно, видно, что рука мастера поработала, спасибо большое!

Спасибо всем за помощь, за возню со мной, знаю, что много глупых вопросов задавала из-за не знания.