PDA

Просмотр полной версии : Программное изменение размера мувика


flasheroleg
02.11.2008, 03:27
...собственно КАК?

И как сделать чтобы с самого начала мувик был например 40% а потом по нажатию увеличивался до 100%?

(В обеих случаях мувик на сцене)

RAlfDog
02.11.2008, 05:14
С помощью JS.
В html пишется JS функция ресайза окна плеера, а из swf-ки при помощи ExternalInterface она и вызывается.
Гуглите по JavaScript'у юзайте help(F1) флеша по ExternalInterface и всё найдёте.
Удачной охоты.
Смотря какой способ реализации вам не претит, можно попробовать использовать SWFObject.

lexa2000lexa
02.11.2008, 10:16
если вам нужно изменять мувик внутри ролика то нужно делать так
мувик._yscale = 40;
мувик._xscale = 40;
действие по которому поисходит изменение :
мувик._yscale = 100;
мувик._xscale = 100;

flasheroleg
02.11.2008, 15:11
lexa2000lexa, а чтобы это увеличение осуществлялось "анимационно"? Т.е. с эффектом увеличения!

flazher
02.11.2008, 16:00
мувик._xscale = 40;
мувик._yscale = 40;
//Увеличиваем постепенно...
мувик._xscale += 5;
мувик._yscale += 5;
//...до ста
if(мувик._xscale > 100) {
мувик._xscale = 100;
}
if(мувик._yscale > 100) {
мувик._yscale = 100;
}
Ой, прошу прощения, надо так:
мувик._xscale = 40;
мувик._yscale = 40;
_root.onEnterFrame = function() {
//Увеличиваем постепенно...
мувик._xscale += 5;
мувик._yscale += 5;
//...до ста
if(мувик._xscale > 100) {
мувик._xscale = 100;
}
if(мувик._yscale > 100) {
мувик._yscale = 100;
}
}:bye:

flasheroleg
02.11.2008, 21:31
mmm._xscale = 40;
mmm._yscale = 40;
mmm.onRelease = function(){
//_root.onEnterFrame = function() {
//Увеличиваем постепенно...
mmm._xscale += 5;
mmm._yscale += 5;
//...до ста
if(mmm._xscale > 100) {
mmm._xscale = 100;
}
if(mmm._yscale > 100) {
mmm._yscale = 100;
}
}

мне наверно нужно вот так! но в этом случае он увеличивается только по щелчкам..
А как сделать так чтобы от первого щелчка он увеличивался до 100%?? И еще нужно чтобы он становился по центру сцены!

Заранее благодарен!

flazher
02.11.2008, 21:58
Вот посмотрите, выкладываю пример.
В центр сцены мувик перемещаем так:
mmm._x = центр_по_x;
mmm._y = центр_по_y;

flasheroleg
02.11.2008, 22:01
Он не работает.

flazher
02.11.2008, 22:12
Что именно? У меня всё работает прекрасно. Ну вот вам код:
var i = 0;
_root.onEnterFrame = function() {
if(Key.isDown(1)) {
i = 1;
}
if(i == 1) {
ball._xscale +=5;
ball._yscale +=5;
}
if(ball._xscale > 160) {
ball._xscale = 160;
}
if(ball._yscale > 160) {
ball._yscale = 160;
}
}

flasheroleg
02.11.2008, 22:14
О! Работает! Спасибо!

А как седлать так, чтобы это увеличение происходило анимационно? И чтобы в центр оон становился после увеличения!

А уменьшение делается подобным образом?

flazher
02.11.2008, 22:20
Вот он уменьшается и становится в центр:
var i = 0;
_root.onEnterFrame = function() {
if(Key.isDown(1)) {
i = 1;
}
if(i == 1) {
ball._xscale -=5;
ball._yscale -=5;
}
if(ball._xscale < 40) {
ball._xscale = 40;
ball._x = центр_по_x;
ball._y = центр_по_y;
}
if(ball._yscale < 40) {
ball._yscale = 40;
}
}
А что значит "увеличиваться анимационно"?

flasheroleg
02.11.2008, 22:33
Что-то у меня вообще ниче не получается :(

Я хочу чтобы мувик изначально находился на определенном месте (координаты которого можно задать в коде) и был например 40% от реального размера!

Потом при щелчке он увеличивается (как motion tween, т.е. постепенно) до 100% и становится на центр сцены!!!

Потом при нажатии кнопки, он возвращается в исходное состояние и размеры!

flazher
02.11.2008, 22:35
Сохраните для 7 флешки, а то у меня Unexpected file format

scarbo
02.11.2008, 22:38
А например привлечь Tween,в голову не приходило?
Он как раз и создан для тех,кто хочет чтоб увеличиваться анимационно
И что это за странный обработчик мыши в onEnterFrame?Очень загадочный код flazher.

flasheroleg
02.11.2008, 22:39
из 9го можно сохранить только в 8ой :(

flazher
02.11.2008, 22:42
Так, когда дело доходит до таких слов:
import mx.transitions.*;
import mx.transitions.easing.*;
я спешно ретируюсь с поле боя :D :D

flasheroleg
02.11.2008, 22:42
scarbo, спасибо! отлично работает!
А можно прокомментировать код? :rolleyes:

scarbo
02.11.2008, 22:50
Блин,я уж удалил пример.
Ну в первых строках мы импортируем классы для создания плавной анимации,в принципе тут многие не долюбливают адобовские классы и пишут свои,это и понятно у каждого свои запросы,но когда надо не заморачиваясь что-то плавно увеличить или уменьшить,почему бы и нет?
Ладно отвлекся,вот мы их с импонтировали,потом нашему мувику назначаем,сжатие в 40%.
Далее пишем функцию,которая отвечает за нажатие по мувику,в ней простейшее проверочное условие,если щелкнули 1 раз то увеличиваем,если 2 раз,то уменьшаем.
И 2 функции увеличения и уменьшения,в котрых ,собственно ,и подключается класс Tween.
Вот и все
//
Так, когда дело доходит до таких слов:
Код:

import mx.transitions.*;
import mx.transitions.easing.*;

я спешно ретируюсь с поле боя
А в чем дело-то?

flazher
02.11.2008, 22:53
А в чем дело-то?
Всё, что в коде начинается после слова import мне всегда решительно непонятно! :(

flasheroleg
02.11.2008, 22:54
import mx.transitions.*;
import mx.transitions.easing.*;
var mojno:Boolean = true
my_mc._xscale = my_mc._yscale = 40
my_mc.onPress = function(){
if(mojno){
mojno = false
zoomUv(this);
}else{
mojno = true
zoomUm(this);
}
}
//
function zoomUv(mc:MovieClip){
mc.varTween = new Tween(mc,"_xscale",Regular.easeOut,40,100,1.2,true);
mc.varTween1 = new Tween(mc,"_yscale",Regular.easeOut,40,100,1.2,true);
}
//
function zoomUm(mc:MovieClip){
mc.varTween = new Tween(mc,"_xscale",Regular.easeOut,100,40,1.2,true);
mc.varTween1 = new Tween(mc,"_yscale",Regular.easeOut,100,40,1.2,true);
}


А как задать изначальные координаты его расположения?
Как написать чтобы после увеличения он поместился в центр?
И как после уменьшение вернуть его на изначальную позицию?

flazher
02.11.2008, 22:58
function posUv(mc:MovieClip){
mc.varTween = new Tween(mc,"_x",Regular.easeOut,начальное_положение_х,центр_х,1.2,true);
mc.varTween1 = new Tween(mc,"_y",Regular.easeOut,начальное_положение_у,центр_у,1.2,true);
}
function posUm(mc:MovieClip){
mc.varTween = new Tween(mc,"_x",Regular.easeOut,центр_х,начальное_положение_ч,1.2,true);
mc.varTween1 = new Tween(mc,"_y",Regular.easeOut,центр_у,начальное_положение_у,1.2,true);
}
Так, что-ли?

scarbo
02.11.2008, 23:03
Да,только, var X = начальное_положение_х, var Y = начальное_положение_у.
Плюс к этому,пока движение не закончиться - my_mc.enabled = false,надо ставить,для защиты от дурака.

flazher
02.11.2008, 23:05
Ура! Теперь я знаю, как пользоваться классом Tween и понял, что пять минут назад был дураком! :D

flasheroleg
02.11.2008, 23:14
Да! Все классно! Это все работает! Спасибо вам большое за помощь!

Только мне надо чтобы он сначала стоял на одном месте на сцене, а когда увеличивался становился в центр! А когда уменьшался, возвращался обратно на то же место!

scarbo
02.11.2008, 23:21
Хм,извините,но для чайников - import mx.transitions.*;
import mx.transitions.easing.*;
var mojno:Boolean = true//проверка увеличивать или уменьшать
var X:Number = my_mc._x;//текущее положение мувика по х
var Y:Number = my_mc._y;//текущее положение мувика по у
var X_center:Number = (Stage.width-my_mc._width)/2;//координаты центра
var Y_center:Number = (Stage.height-my_mc._height)/2;
//
my_mc._xscale = my_mc._yscale = 40
my_mc.onPress = function(){
if(mojno){
mojno = false
zoomUv(this);
}else{
mojno = true
zoomUm(this);
}
}
//
function zoomUv(mc:MovieClip){
mc.varTween = new Tween(mc,"_xscale",Regular.easeOut,40,100,1.2,true);
mc.varTween1 = new Tween(mc,"_yscale",Regular.easeOut,40,100,1.2,true);
mc.varTween2 = new Tween(mc,"_y",Regular.easeOut,Y,Y_center,1.2,true);
mc.varTween3 = new Tween(mc,"_x",Regular.easeOut,X,X_center,1.2,true);
}
//
function zoomUm(mc:MovieClip){
mc.varTween = new Tween(mc,"_xscale",Regular.easeOut,100,40,1.2,true);
mc.varTween1 = new Tween(mc,"_yscale",Regular.easeOut,100,40,1.2,true);
mc.varTween2 = new Tween(mc,"_y",Regular.easeOut,Y_center,Y,1.2,true);
mc.varTween3 = new Tween(mc,"_x",Regular.easeOut,X_center,X,1.2,true);
}

flasheroleg
02.11.2008, 23:27
А если таких роликов у меня будет 2 и больше...

Почему второй когда уменьшается возвращается на координаты первого? Как этого избежать? И как сделать так, чтобы тот на который нажимаешь, становился на передний план?