Autor Zpráva
camp
Profil *
Ahoj, mám vytvořený mc se čtvercem a chci pomocí as jej dostat plynule z jednoho rohu do druhého. K tomu ještě aby se ztrácel a znovu objevoval. Pomozte mi s tím prosím. Pro mnohé je to jistě hračka. Ještě taková otázečka. Jak to pak mám přesně udělat? Script aplikuji na ten čtverec v MC a potom si udělám o kousek dál keyframe a aplikuji druhý script? Nebo jak to funguje? Délku animace stále určuji rozdílem mezi prvním a posledním snímkem n časové ose nebo přímo ve scriptu?
embee
Profil
/*myMc je jmeno instance pozadovaneho klipu na scene (na hlavni casove ose), skript se strci na 1. frame hlavni casove osy. Co se tyce tween classu, muzes ho vytunin podle svych potreb - staci zmenit parametry pri tvorbe tweenu nebo muzes pridruzit dalsi funckce dle libosti ;) Jo a jeste poznamka - je to jenom pro Flash8 +, kvuli tem tweenum. Muzes je samozrejme nahradit klasickymi onEnterFramy, ale to je trosku slozitejsi nez u pruhlednosti */

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

var myMc:MovieClip = eval("this.myMc");


function showUp(target:MovieClip, speed:Number):Void {
delete target.onEnterFrame;
target.onEnterFrame = function ():Void {
if(target._alpha < 100) {
target._alpha +=speed;
} else {
delete target.onEnterFrame;
target._alpha = 100;
hideDown();
}
}
}

function hideDown(target:MovieClip, speed:Number):Void {
delete target.onEnterFrame;
target.onEnterFrame = function ():Void {
if(target._alpha > 0) {
target._alpha -=speed;
} else {
delete target.onEnterFramel;
target._alpha = 0;
showUp();
}
}
}

function moveStuff(target:MovieClip, targetX:Number, targetY:Number, time:Number):Void{

var tweenX:Tween = new Tween(target,"_x",Strong.easeOut,target._x,targetX,time,true);
var tweenY:Tween = new Tween(target,"_y",Strong.easeOut,target._y, targetY,time,true);
}

hideDown(myMc, 10);
moveStuff(myMc, 500, 400, 10);
camp
Profil *
embee

nedal by jsi mi icq číslo?
chtěl bych se zeptat na pár věcí ještě pokud by tě to neobtěžovalo?
embee
Profil
camp
sry ale icq nedavam. Klidne pis sem nebo zaloz novy thread pokud te neco konkretniho zajima
camp
Profil *
Tak ok, třeba to bude i pro ty ostatní co s tímto začínají.
Takže
import mx.transitions.*;
import mx.transitions.easing.*; znamená co? Místo té hvězdičky mám dopnit co?

Nebo takhle, byl bys tak ochotný a ke každému řádku napsal stručné vysvětlení? Abych věděl co to přesně znamená. Byl bych ti moc vděčný.
embee
Profil
camp
ok, pro tentokrat... ale priste pouzij google, najdes mnoho odpovedi ;)

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

- tyto dva radky maji za ukol naimportovani potrebnych trid pro aplikovani nasledneho skriptu. Pokud se ptas, co je to trida, tak se jedna o teorii objektove orientovaneho programovani a neni v mych silach ti to poradne vysvetlit (uz jenom z toho duvodu, ze tomu sam poradne nerozumim). Jen ramcove - tento skript vola jiny, jiz zabudovany skript ve flashi a nacte ho tak, aby se dal pouzivat. Tudiz nasledne kus kodu "var tweenX..." je jenom zavolani nejake funkce uvnitr tridy (= kusu skriptu), kterou ty nevidis. Trida sama zvladne naprogramovat potrebne veci tak, aby se cilovy objekt hybal zpusobem, jaky zadas v parametrech. Jinak bys to samozrejme musel sam naprogramovat a to je slozitejsi.

var myMc:MovieClip = eval("this.myMc");

- zde vytvaris promennou myMc, jejiz hodnota se rovna umisteni tveho MC na scene. Jedna se tedy o referenci a ja to pouzivam pro zprehledneni kodu. Nicmene to neni nutne, konec koncu to zabira vice mista v pameti, takze pokud se rozhodnes toto vynechat, musis pak pouze adresovat cilovy klip primo (v konkretnim pripade uvedenem vyse je to this.myMc)

function showUp(target:MovieClip, speed:Number):Void {
delete target.onEnterFrame;
target.onEnterFrame = function ():Void {
if(target._alpha < 100) {
target._alpha +=speed;
} else {
delete target.onEnterFrame;
target._alpha = 100;
hideDown();
}
}
}

- tato funkce zajistuje pouze to, ze nekolikrat za sekundu (podle toho, jakou mas nastavenou framerate), zkontroluje hodnotu (ne)pruhlednosti ciloveho MC a pokud je nizsi nez 100, prida k jeji hodnote cislo rovnajici se parametru speed (ktery sam zadavas). Pro jistotu funkce nejprve smaze veskere funkce asociovane s udalosti onEnterFrame (= spousteni skriptu uvnitr resitele udalosti nekolikrat za sekundu podle framerate) a pak teprve priradi svuj vlastni (tedy funkce pro inkrementaci hodnoty alhpa). V okamziku, kdy hodnota pruhlednosti prekroci hodnotu 100, skript sam nastavi jeho hodnou zpatky na 100, smaze funkci asociovanou s udalosti onEnterFrame a zavola funkci pro zmizeni MC.

function hideDown(target:MovieClip, speed:Number):Void {
delete target.onEnterFrame;
target.onEnterFrame = function ():Void {
if(target._alpha > 0) {
target._alpha -=speed;
} else {
delete target.onEnterFramel;
target._alpha = 0;
showUp();
}
}
}

- tato funkce dela to same jako vyse popsana, pouze s tim rozdilem, ze hodnotu alpha nezvysuje, ale snizuje a porovnava ji s hodnotou 0.

Obe funkce v podstate delaji to, ze bud nechaji objevit nebo zmizet dany MC (rychlost zavisi na framerate a hosnote speed) a v pripade, ze hodnota alpha tohoto MC dosahne krajni meze (0 nebo 100), se funkce sama zastavi a spusti tu druhou (takze to dela to cos popisoval)

function moveStuff(target:MovieClip, targetX:Number, targetY:Number, time:Number):Void{

var tweenX:Tween = new Tween(target,"_x",Strong.easeOut,target._x,targetX,time,true);
var tweenY:Tween = new Tween(target,"_y",Strong.easeOut,target._y, targetY,time,true);
}

tato funkce ma za ukol rozpohybovat MC po scene. Takze jen predas parametry z funkce konstruktoru tridy Tween (funkce, ktera je schovana ve vyse zminovane tride. Ma za cil vytvorit tween - nazveme to treba zaregistrovani a spusteni pohybu). Tyto paramtery jsou preddefinvoane a ty jen pouze doplnis jejich hodnoty. Detaily si muzes naji na www.adobe.com

hideDown(myMc, 10);
moveStuff(myMc, 500, 400, 10);

- zde zaovlas predem definovane funkce a vsechno uvedes do pohybu. Takze vlastne rikas:

zneviditelni myMc o hodnotu 10 jednotek alpha Ykrat za sekundu (Y = frame rate)
pohni s myMc do cile o souradnicich 500 na x, 400 na y behem 10 sekund
embee
Profil
edit k import mx.transitions.*

Co se tyce te hvezdicky - tridy jsou v sobe ulozene jako kontejnery, neco jako adresarova struktura. Takze timto prikladem vlastne zadas o import veskerych podtrid nachazejicich se v ceste import mx.transitions (je to de facto to same jako mx/transitions/*.* )
camp
Profil *
Moc ti děkuji, jsi moc hodný, ale nějak to nedokážu rozjet, poslední věc co bych od tebe prosil, jestli by jsi mi neudělal zdroják a já se na to moh kouknout jak to vypadá v praxi. Díky ti za všechno.
embee
Profil
camp
nejak rozjet znamena co? :D
camp
Profil *
mno píše mi to pořád chyby, nic to nedělá :(
embee
Profil
camp
jake chyby? Zkus to konkretizovat. Chyby hlasene debuggerem flashe se daji nejlepe odstranit :) staci pastnout hlasku
camp
Profil *
embee

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 1: Statement must appear within on/onClipEvent handler
import mx.transitions.*;

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 2: Statement must appear within on/onClipEvent handler
import mx.transitions.easing.*;

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 4: Statement must appear within on/onClipEvent handler
var myMc:MovieClip = eval("this.myMc");

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 7: Statement must appear within on/onClipEvent handler
function showUp(target:MovieClip, speed:Number):Void {

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 20: Statement must appear within on/onClipEvent handler
function hideDown(target:MovieClip, speed:Number):Void {

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 33: Statement must appear within on/onClipEvent handler
function moveStuff(target:MovieClip, targetX:Number, targetY:Number, time:Number):Void{

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 39: Statement must appear within on/onClipEvent handler
hideDown(myMc, 10);

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 40: Statement must appear within on/onClipEvent handler
moveStuff(myMc, 500, 400, 10);

Total ActionScript Errors: 8 Reported Errors: 8
embee
Profil
camp
kam davas ten skript? Vsadim, ze na/do MC.
camp
Profil *
Na první snímek hlavní časové osy.
embee
Profil
embee
jsi si zcela jisty? Mas tam male "a" na snimku? Tyhle chyby totiz generuje flash, pokud skirpt pro deklaraci funkci a promennych davas na objekt - proto ta hlaska "Statement must appear within on/onClipEvent handler" = on(Release) {, on(Press) { - proste bys ho musel zabalit do funkce a to nema smysl... nebo jsem uplne mimo :DDD
camp
Profil *
Mno já si myslím, že si beru moc velké sousto, na to, že umím téměř h...o. Proto bych chtěl poradit s něčím lehčím. Dělám úkoly u určitých tutoriálů a hned jsem se zasekl u tohoto:

Vytvořte program, ve kterém uživatel zadá do 2 input textů 2 čísla,
do jiného dynamic textu se vypíše větší hodnota z obou čísel
a do 2. dynamic textu se jako opakování vypíše součin (násobení) obou čísel.
Hodně zdaru při plnění úkolu.


Mám pouze začátek, ale přesto to mám blbě:

on(release) {
if( _root.vetsi_hodnota01 > _root.vetsi_hodnota02) {
_root.vetsi_hodnota = vetsi_hodnota01;
}else{
_root.vetsi_hodnota = vetsi_hodnota02;
}
Jak by to mělo být správně?
a pokud bych chtěl mít proměnné jako např.:

a = vetsi_hodnota01
b = vetsi_hodnota02

tak kam tyto dva řádky napsat?
embee
Profil
camp
delas zastarale tutorialy, kod se zpravidla nepise tim stylem, jakym to aplikujes ty. Jedna se o prezitek z AS 1.0 a spise se to nepouziva a uz vubec nedoporucuje... taky jsem tim prosel :D Spis ti poradim obecnejsi cestu: procti si zaklady programovani v helpu flashe nebo na www.adobe.com - je dobre zpracovany a je tam zpousta prikladu, jak kod psat. Jinak byt tebou, poohlednu se po nejake knizce treba na www.cpress.cz , popripade po video tutorialech (kdyz zapnes google a zamyslis se, sezenes je ;). Nema cenu se snazit programovat cokoli slozitejsiho, nez pochopis zakladni principy - promenne, funkce a jejich tvorba, udalosti a nacitani externich dat. Pokrocilejsi jsou pak metody OOP, ale to te zatim nemusi vubec zajimat :)
camp
Profil *
Díky ti, že mi pomáháš, problém je v tom, že angličtina také nepatří mezi mé silné stránky. Mám zakoupenou knihu od Phillipa Kermana z roku 2002 pro flash 5, ale obávám se, jak už jsi tu zdůraznil, že to nebude mít ten pravý efekt, jelikož je to kniha poměrně zastaralá. Nevíš o nějakých českých tutoriálech? Byl bych ti moc vděčný, což mimochodem již jsem.
embee
Profil
camp
bohuzel ceske tutorialy dobre kvality co se tyce flashe neznam. Problem je v tom, ze pred nedavnem vysel novy flash CS3 s generaci AS 3.0 a ten je zase o dost jiny nez to v cem se delalo doted - a knihy jeste nejsou (v cestine). Takze byt tebou, opravdu oprasim anglictinu. Ta pocitacova neni tak slozita a je namluvena/napsana tak, aby se ji dalo rozumet ;)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0