PDA

Volledige versie bekijken : Gallery, CoverFlow


Camiel
%Europe/Berlin %622 %2007, 14:56
Hallo allemaal,

Na lang zoeken heb ik eindelijk een voorbeeld gevonden van een ok werkende coverflow op:
http://www.trick7.com/blog/swf/coverSlow.html


Deze werkt alleen niet wanneer ik da fla open. Als het weinig werk is... Zou iemand die bug eruit kunnen halen?

Thanks!

Mr. Black
%Europe/Berlin %679 %2007, 16:18
dit komt gewoon omdat je sommige classes mist, zoals fuse, of Distortimage.

deze staan gewoon niet in de map! dan kan hij ze moeilijk openen...

[dit kan je ook simpel zelf zien; test movie en kijk dan eens in de output ;) ]

Camiel
%Europe/Berlin %475 %2007, 11:24
Dat is mij ook opgevallen maar ik krijg dit niet opgelost, wie wel?

marvos
%Europe/Berlin %859 %2007, 21:38
Weet niet of het nog relevant is maar bij mij werkt hij goed, na de volgende stappen:

Er missen een paar as library's die je nodig hebt.
Allereerst de fuse kit:
http://www.mosessupposes.com/Fuse/index.html
Gewoon de extensie installeren/

Dan de sandy as lib:
http://www.flashsandy.org/download/
En hier heb je ook de Pixlib voor nodig (link staat bovenin deze download pagina)

Dan zet je de sandy uit de zip map in je Classes map:
C:\Program Files\Macromedia\Flash 8\en\First Run\Classes
idem voor de Pixlib maar dan de com map
Zodat je hem altijd kan importeren ook voor andere flash files.

Hierna kreeg ik nog een foutmelding op de sandy/util/DistortImage.as dat er een variabele 2x werd aangemaakt deze regel 238
//public var points:Array;

gewoon uitgecomment en hij doet het prima!

suc6,

Marien

-Rutger-
%Europe/Berlin %890 %2007, 22:23
Je kant het ook proberen zelf te maken door nextFrame();
//en
prevFrame();

Chantal C.
%Europe/Berlin %866 %2007, 20:47
Hai hai,

Goeie info. Heb alleen nog een paar vraagjes:

Er staat:

Dan zet je de sandy uit de zip map in je Classes map:
C:\Program Files\Macromedia\Flash 8\en\First Run\Classes
idem voor de Pixlib maar dan de com map

De Sandy heb ik in de Classes map geplaatst, maar welke com map wordt er bedoeld voor de Pixlib? Ik geloof dat ik 't niet goed gedaan heb.

Ikzelf krijg nog 2 foutmeldingen:

**Error** C:\Documents and Settings\Eigenaar\Mijn documenten\...\flash\CoverSlow\CoverSlow\com\trick 7\effects\ReflectionFlipper.as: Line 11: The class or interface 'sandy.util.DistortImage' could not be loaded.
var distortImage:DistortImage;

**Error** C:\Documents and Settings\Eigenaar\Mijn documenten\...\flash\CoverSlow\CoverSlow\com\trick 7\effects\ReflectionFlipper.as: Line 28: The class or interface 'sandy.util.DistortImage' could not be loaded.
distortImage = new DistortImage(distortMc, baseBmd, 5, 5);

Total ActionScript Errors: 2 Reported Errors: 2

Wat doe ik hier fout?

Hieronder mijn complete script:

import com.trick7.effects.Reflection;
import com.trick7.effects.ReflectionFlipper;
import sandy.util.DistortImage;
import flash.display.BitmapData;
import com.mosesSupposes.fuse.*;
ZigoEngine.simpleSetup(Shortcuts, PennerEasing);
//SETTING--------------------------------------
_quality = "LOW";
var backgroundColor:Number=0xffffff;
var num:Number = 21;
var lastP:Number = 10;
var centerP:Number = 5;
var duration:Number = .4;
var easingType:String = "easeInOutQuad";
var tintVal:Number = 50;
var scaleVal:Number = 160;//MCが中央に来た時に、他のMC比で何パーセント拡大するか
var yLevel = 150;
var rotaValue:Number = 2.5;
//PRESET---------------------------------------
var home = this;
var refArray:Array = new Array();
var loopArray:Array = new Array();
//INIT-----------------------------------------
for (var i = 0; i<num; i++) {
mc = this.createEmptyMovieClip("mc_"+i, i);
var myBitmapData:BitmapData = BitmapData.loadBitmap ("image"+(i+1));
mc.AttachBitmap(myBitmapData,1);//2nd param must be 1.
mc.index = i;
var ref:ReflectionFlipper = new ReflectionFlipper(mc, 3, backgroundColor);
refArray.push(ref);
//表示できるMCだけを配置し、出現時のエフェクトをFuseで表現する。
//set MCs position if they are allowed to show up. And Fuse them.
if (mc.index<=lastP) {
mc._x = this["guideLine"+i]._x;
loopArray.push(mc);
if (mc.index == centerP) {
mc._xscale=mc._yscale=0
mc.scaleTo(scaleVal, .5, easingType, .5,{startfunc:'calcRotation',startargs:mc});
} else {
mc.tintTo(backgroundColor,tintVal, 0, easingType);
}
} else {
mc.tintTo(backgroundColor,tintVal, 0, easingType);
mc._visible = false;
//とりあえず深度を下げておく
//set invisible MC in deeper Level.
mc.swapDepths(-1*mc.index);
}
//Y座標は全MC共通
//set all MC's _y position
mc._y = yLevel;
//初期表示のMC用の角度計算
//
calcRotation(mc);
mc.onPress = function() {
home.sequenceFlg = true;
sequenceSlide(this);
};
//両端は表示しない(フェードアウトしている)
//MC in both sides are invisible
if (i<1 || i>=lastP) {
mc._alpha = 0;
mc._visible = 0;
}
}
setDepths();
//FUNCTIONS------------------------------------
////左方向に1回分スライドする関数
////slide 1 block to the left
function slideLeft() {
//表示MCの深度調整
home.setDepths();
//遠くから出現する表現
loopArray[lastP]._x += 50;
//遠くへ消失する表現
loopArray[1].slideTo(this["guideLine0"]._x-50, "0", duration, easingType);
for (i=2; i<=lastP; i++) {
loopArray[i].slideTo(this["guideLine"+(i-1)]._x, "0", duration, easingType);
if (i == centerP+1) {
//中央に向かうMCに対して
loopArray[i].tintTo(backgroundColor,0, duration, easingType);
loopArray[i].scaleTo(scaleVal, duration, easingType,0,{updfunc:'calcRotation',updargs:loopA rray[i]});
loopArray[i].swapDepths(this.getNextHighestDepth());
} else if (i == centerP) {
//中央から遠ざかるMCに対して
loopArray[i].tintTo(backgroundColor,tintVal, duration, easingType);
loopArray[i].scaleTo(100, duration, easingType,0,{updfunc:'calcRotation',updargs:loopA rray[i]});
}
}
loopArray[1].fadeOut(duration, easingType);
loopArray[lastP].fadeIn(duration, easingType);
loopArray.shift();
var addNum:Number = loopArray[loopArray.length-1].index+1;
if (addNum>=num) {
//ループさせる
addNum = 0;
}
loopArray.push(this["mc_"+addNum]);
var addMC:MovieClip = loopArray[loopArray.length-1];
addMC._x = home["guideLine"+lastP]._x;
calcRotation(addMC);
}
////右方向に1回分スライドする関数
////slide 1 block to the right
function slideRight() {
//表示MCの深度調整
home.setDepths();
//遠くから出現する表現
loopArray[0]._x -= 50;
//遠くへ消失する表現
loopArray[lastP-1].slideTo(this["guideLine"+lastP]._x+50, "0", duration, easingType);
for (i=0; i<=lastP-2; i++) {
loopArray[i].slideTo(this["guideLine"+(i+1)]._x, "0", duration, easingType);
if (i == centerP-1) {
//中央に向かうMCに対して
loopArray[i].tintTo(backgroundColor,0, duration, easingType);
loopArray[i].scaleTo(scaleVal, duration, easingType,0,{updfunc:'calcRotation',updargs:loopA rray[i]});
loopArray[i].swapDepths(this.getNextHighestDepth());
} else if (i == centerP) {
//中央から遠ざかるMCに対して
loopArray[i].tintTo(backgroundColor,tintVal, duration, easingType);
loopArray[i].scaleTo(100, duration, easingType,0,{updfunc:'calcRotation',updargs:loopA rray[i]});
}
}
loopArray[lastP-1].fadeOut(duration, easingType);
loopArray[0].fadeIn(duration, easingType);
loopArray.pop();
var addNum:Number = loopArray[0].index-1;
if (addNum<0) {
//ループさせる
addNum = num-1;
}
loopArray.unshift(this["mc_"+addNum]);
var addMC:MovieClip = loopArray[0];
addMC._x = guideLine0._x;
calcRotation(addMC);
}
////各MC同士の深度を修正する関数
////correct each level
function setDepths() {
for (var i = 0; i<centerP; i++) {
home.loopArray[i].swapDepths(i);
//trace(home.loopArray[i]+":"+home.loopArray[i].getDepth())
}
for (var i = centerP; i<=lastP; i++) {
home.loopArray[i].swapDepths((lastP)+centerP-i);
//trace(home.loopArray[i]+":"+home.loopArray[i].getDepth())
}
}
////スライド移動&シーケンサーを管理する関数。MCがクリックされた時にこれを呼び出している。
function sequenceSlide(mc:MovieClip) {
for (var i = 0; i<lastP; i++) {
if (mc._name == home.loopArray[i]._name) {
//自分が中央から何個分離れているかを計算
var distance = Math.abs(i-centerP);
}
}
if (distance != 0) {
var funcString:String;
if (mc._x>home["guideLine"+centerP]._x) {
funcString = "slideLeft";
} else if (mc._x<home["guideLine"+centerP]._x) {
funcString = "slideRight";
}
var f:Fuse = new Fuse();
//中央からの距離(個数)分、スライド移動(slideLeftかslideRight)を繰り 返し実行する
for (var i:Number = 0; i<distance; i++) {
f.push({target:home, duration:duration, startfunc:funcString, startscope:home});
}
//押しっぱなし用の処理(上のFuseシーケンサー終了のタイミングで、マウスが押下をチェック している)
f.push({target:home, duration:0, startfunc:"checkLoop", startscope:home});
f.start();
}
}
////押しっぱなしなら、1区間ずつスライドさせ続けるための関数
function checkLoop() {
if (home.sequenceFlg == true) {
if (home._xmouse<home["guideLine"+centerP]._x) {
var num = -1;
} else {
var num = 1;
}
sequenceSlide(loopArray[centerP+num]);
}
}
////自分の位置に応じて回転させる関数
////rotate mc
function calcRotation(mc:MovieClip){
var xRotation:Number;
if (mc._x>home["guideLine"+(centerP-1)]._x && mc._x<home["guideLine"+(centerP+1)]._x) {
//中央付近
//center
xRotation = mc._x-home["guideLine"+centerP]._x;
}else if (mc._x<=home["guideLine"+(centerP-1)]._x) {
//左側
//left
xRotation = home["guideLine"+(centerP-1)]._x-home["guideLine"+centerP]._x;
} else if (mc._x>=home["guideLine"+(centerP+1)]._x) {
//右側
//right
xRotation = home["guideLine"+(centerP+1)]._x-home["guideLine"+centerP]._x;
}
//adjust
xRotation /= rotaValue;
home.refArray[mc.index].doRender(xRotation);
};
//各MCをonPressすると押しっぱなし処理のトリガーがtrueになるが、falseにするトリガーは 、_root.onMouseUpです
this.onMouseUp = function() {
home.sequenceFlg = false;
};

//ガイドとなる矢印を消しておく
//show off all guideLines
for (var i:Number = 0; i<=lastP; i++) {
this["guideLine"+i]._visible = false;
}

Nog één dingetje: In de tuturial http://www.trick7.com/blog/video/CoverSlow1/ zie je dat afbeeldingen in de map images een Linkage hebben. Is dat nodig om te doen, zo ja, hoe doe ik dat?

Sorry als dit te uitgebreid is, ben een echte beginneling in Flash, maar vind de coverslow een geweldig iets.

Wie helpt mij?

Gr.
Chantal

marvos
%Europe/Berlin %653 %2008, 15:40
Ik zie nu dat ik ook files kan uploaden bij deze dus. volgens mij heb je deze nodig...waarmee het goed moet werken
of deze is wellicht wat simpeler te implementeren:
http://www.n99creations.com/vieweg.php?id=5

elmerbulthuis
%Europe/Berlin %877 %2011, 21:03
heb er wel een in javascript gevonden!
http://coulisse.luvdasun.com

Jan
%Europe/Berlin %017 %2011, 00:25
Hoi, dank voor de aanvulling, maar het topic waarop je reageert, is meer dan 3 jaar oud. ;)

Jan