Archive for the ‘Flash’ Category

Flash Help в FDT 3.5

Февраль 7, 2011

После того, как у меня полетел ноут, пришлось всё поднимать на новом. Так вот. Оказывается, что FDT 3.5 не умеет обрабатывать справку от CS5. На старом ноуте всё работало, потому что сначала там был установлен CS3, а только потом CS4.

Решить проблему помогла статья. Автор просто взял хелп от CS4 и выложил аккуратно запаковав :) .

Flash. Как сделать сложный Tween?

Декабрь 10, 2007

Как создавать простой Tween я узнал из livedocs

В этой документации имеется пример, который изменяет только одно свойство.


import fl.transitions.Tween;
import fl.transitions.easing.*;
var myTween:Tween = new Tween(myObject, "x", Elastic.easeOut, 0, 300, 3, true);

А как можно одновременно изменять два свойства?

С этим вопрос я обратился на форум flasher.ru. И как оказываеться, есть специальный класс TweenLite. Про него можно почитать на http://blog.greensock.com/

Всё очень грамотно офрмлено, а в комлекте есть генериловка кода под этого класса. Честное слово, очень порадовало.

За подсказку спасибо fljot.

Flash. Ошибки новичка.

Октябрь 10, 2007

Я, используя loader, загрузил картинку и сразу же её ложил в некоторый MovieClip. Как оказалось, при увеличении этого клипа картинка переставала отображаться. Обход этой ситуации оказался следующий. Загруженную картинку нужно просто было нарисовать на Shape, а потом этот Shape бросить на MovieClip, который мы будем расширять. Этот способ позволил также включить сглаживание при увеличении (последний параметр в beginBitmapFill)


var image:Bitmap = new Bitmap(event.target.loader.content.bitmapData.clone());
var shape:Shape = new Shape();

shape.graphics.beginBitmapFill(image.bitmapData, null, false, true);
shape.graphics.drawRect(0,0,image.width, image.height);
shape.graphics.endFill();

Flash. Refactoring.

Октябрь 2, 2007

Я программирую в основном на Java. Но вот понадобился Flash. Что я могу сказать по этому поводу…. Flash обзавёлся ноым языком снераиев (последний раз я видел флеш когда была только пятая версия). Этот язык похож на Java, всё при неём: ООП, пакеты….Порадовала обработка XML.

Но, честно сказать, очень тяжело (а если точно сказать лень) изучать что-то похожее. Был бы полным ламаком, учил бы с нуля и знал бы самые простые вещи. Вот и приходиться по форумам лазить.

Это было отступление от темы….. :)

Так вот, на моей карте оказалось уже два таскаемых объекта. Это карта и панель масштаба. Когда пришла очередь миникарты, то я понял, что надо что-то менят. Третий объект, в котором опять од-но и тоже. Вот тут нам и поможет наследование.

Реализовал клас, который позволяет создавать объекты, которые можно таскать в переделах экрана.

Всё просто, берешь и рисуешь мувик, который будет у нас фоном. Единственное требовани : верхнний левый угол этого мувика должен быть в координатах 0,0. Называешь его к примеру Background. Наследуешь его от моего класса. Для этого пишешь примерно такой код.


/**
* Фон Ð´Ð»Ñ Ð¿Ð°Ð½ÐµÐ»Ð¸ "
*/

package {

import by.strix.MovedBackground;

public class Background extends MovedBackground {
}
}

После этого ложишь свой BackGround на любой клип на задний план. Вот и всё.

Код моего класса следующий.


/**
* Фон Ð´Ð»Ñ Ð¿Ð°Ð½ÐµÐ»ÐµÐ¹. ÐозволÑÐµÑ Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°ÑÑ Ð² пÑÐµÐ´ÐµÐ»Ð°Ñ Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ð¹ облаÑÑи
* !!! ÐÐÐÐÐÐÐÐ. ÐÐ»Ñ ÐºÐ¾ÑÑекÑной ÑабоÑÑ Ð½ÐµÐ¾Ð±Ñодимо, ÑÑо Ð±Ñ Ñон наÑиналÑÑ Ñ (0,0)
*/

package by.strix {

import flash.display.MovieClip;
import flash.events.*;
import flash.geom.Rectangle;

public class MovedBackground extends MovieClip {

//private var settings:XML = MovieClip(root).settings.getSettings();

private var _parent:MovieClip = MovieClip(parent);

public function MovedBackground() {


// УÑÑановка обÑабоÑÑиков Ð´Ð»Ñ Ð¿ÐµÑеÑÑгиваниÑ.
addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown);
addEventListener(MouseEvent.MOUSE_UP, handleMouseUp);
stage.addEventListener(Event.MOUSE_LEAVE, handleMouseLeave);


// УÑÑановка обÑбоÑÑиков Ñ ÑодиÑелÑ, Ð´Ð»Ñ ÐºÐ¾ÑоÑого ÑвлемÑÑ Ð·Ð°Ð´Ð½Ð¸Ð¼ Ñоном, Ð´Ð»Ñ Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¸Ñ.
_parent.addEventListener(MouseEvent.MOUSE_OVER, handleMouseOver);
_parent.addEventListener(MouseEvent.MOUSE_OUT, handleMouseOut);

// пÑогÑаммно ÑÑÑанавливаем в заÑемненное положение
handleMouseOut(null);
}

function handleMouseDown(event:Event):void {
// ХиÑÑое вÑÑмÑление Rect Ð´Ð»Ñ StartDrag ÑвÑзвно ÑÑем, ÑÑо наÑало клипа не в нÑле.
var dx:Number = width-stage.stageWidth + x;
var dy:Number = height-stage.stageHeight + y;
var dragRect:Rectangle = new Rectangle(-dx,-dy, dx-x,dy-y);
//parent.startDrag(false, dragRect);
//startDrag(false, dragRect);*/
MovieClip(parent).startDrag(false, dragRect);
}

function handleMouseUp(event:Event):void {
//parent.stopDrag();
stopDrag();
}

function handleMouseLeave(event:Event=undefined):void {
/*if (root.panel.dragged_mc){
root.panel.handleMouseUp();
}*/
handleMouseUp(event);
}

// Ðаводи мÑÑкÑ
function handleMouseOver(event:Event=undefined):void {
_parent.alpha = 1;
}

// Уводим мÑÑкÑ
function handleMouseOut(event:Event=undefined):void {
_parent.alpha = 0.25;
}
}
}

Flash. Проблемы с прокруткой.

Октябрь 2, 2007

Сделал во влеше возможность прокручивать карту мышкой. Но кроме карты еще начала прокручивать и страница. Решение было найдено по этому адресу http://etcs.ru/blog/as3/globalmouse/ а его описание — по этому адресу http://www.flasher.ru/forum/showthread.php?t=99708

Flash. Какой максимальный размер может быть у MovieClip?

Сентябрь 30, 2007

Этот вопрос я задал себе, когда мне понадобилось сделать ну очень большой MovieClip. Открыл Flash CS3 (десяточка). Создал MovieClip с квадратиком внутри, положил его на первый кадр. И начал в Properties выставлять ему W и H (width и height). Как оказалось, если ц около 7 тысяч, то h должно быть не более 3 тысяч. Самый большой квадратный MovieClip у меня имел размеры 5760х5760.

Тут на меня напала тоска. (more…)

Strix. Хождение по мукам.

Сентябрь 29, 2007

Началось всё с того, что на работе не стало интеренета. Нет, его не отключили, просто он ну очень медленно работал. А тут я как назло начал встраивать во Flash прелоадер. Так как я до этого момента вообще ничего не присал на ActionScript 3.0, мне пришлось начитаться как русскоязычных так и англоязычных ресурсов.

Кроме неработающего интеренета еще вдабавок слёг один из самых на мой взгляд лучших русскоязычных ресурсов по Flash форум flasher.ru. Я взял пример написанный на Flash 9.0 alfa. Запускаю его….работает. Делаю тоже самое — не работает. Копирую содержимое в мой файл…. Не работает.

Выдаёт такую ошибку:

1046: Type was not found or was not a compile-time constant: TextField.

Стало грустно. К вечеру появился интеренет и всё встало на свои места. :)

Оказывается, если вы ложите в MovieClip поле для ввода и даёте ему имя, то в файле класса для этого MovieClip’а желательно (в моём случае оказалось обязательно) указать в импортах

import flash.text.TextField;

В этом мне помогли лайф доки от адоба.
Потом начала выскакивать другая ошибка. У меня был мувиклип, который лежал на TimeLine. Так вот мне надо было из этого MovieClip’а сделать play() для TimeLine. В примере было так:

parent.play();

Вот оно мне начало выдавать следующую ошибку.

1061: Call to a possibly undefined method play through a reference with static type flash.display:DisplayObjectContainer.

Но мы ж не лохи, мы знаем ООП и понимаем, что parent имеет тип DisplayObjectContainer (смотрите опять же лайф доки от Adobe), а метод play() есть у MovieClip. Дело ясное — casting, или говоря попросту нужно привести тип. Но как это делаеться во Flash. Ответ на это вопрос нам даёт англоязычный ресурс http://www.senocular.com/flash/tutorials/as3withflashcs3/?page=3 (на смотреть в самом низу страницу) . Тутдаже и пример есть. Вот так всё просто оказалось.

MovieClip(parent).play();

Кстати, сайт senocular.com очень даже информативный. Советую посетить.

Посмотреть мой прелоадер можно тут. Он конечно не притендует на красоту и изящество, но функционал достигнут.

Как всегда, всех заинтересованных приглашаю в коменты. А код моего прелоадера получился примерно такой.


package main {
import flash.text.TextField;
import flash.display.MovieClip;
import flash.events.*;

public class preloader extends MovieClip {
public function preloader() {
addEventListener(Event.ENTER_FRAME, Update);
}

public function Update(e : Event):void {
var bytesLoaded:Number = stage.loaderInfo.bytesLoaded;
var bytesTotal:Number = stage.loaderInfo.bytesTotal;
var s:String = "";
var percent:Number = 0;
if (bytesTotal>0){
percent = Math.floor(bytesLoaded/bytesTotal*100);
s = percent+"% ("+
Math.round(bytesLoaded/1024)+"kb / "+
Math.round(bytesTotal/1024)+"kb)";
}
this.txt.text="Loading... "+s;
if (bytesLoaded==bytesTotal || bytesTotal==0) {
removeEventListener(Event.ENTER_FRAME, Update);
MovieClip(parent).play();
}
}

}
}

Кстати, как выделить так исходный код я узнал в соответсвующем FAQ. Но у меня почемуто ничего не получаеться. :(