Помогни ни да направим Uroci.net по - богат! Добави урок

Flash 3D XML Gallery - Flash CS4

d0brin   трудност:    видян: 17526

Значи да започваме, така..., тази галерия се състои от 3 елемента това са:

 

  • Нашият .swf файл.
  • Външен .xml файл.
  • И една папка където ще бъдат всичките ни изображения.

 

Само да поясня, тази галерия ще има само малки изображения (thumbnaills), към който ще има прекрипен линк, тоест като я направите като цъкнете на някое изображение ще ви се отваря някаква страница, каквато искате.

 

I. Изготвяне на .swf файла със галерията

 

1. Отваряме нов документ на AS 2.0

 

2. Направете Stage Size: 800x400

 

Note: Размерът няма значение, защото колкото и да е голямо Action Script кода ще си оразмери 3D Style-a.

 

3. Преименуваме Layer 1 на Background и на него си слагаме фона на галерията.

 

4. Създаваме нов Layer, който го кръщаваме TXT. На него ще има 3 полета, в който ще се изписва информацията за картинката която сме селектирали от галерията. Ето как се правят полетата:

 

-- Направете 1 Dynamic Field и му задайте Instance Name = tn_title

 

-- Под него направете още едно Dynamic Field и нека то да е с повече от един ред разстояние и отново му задайте Instance Name, само че този път е tn_desc

 

-- И правим още едно Dynamic Field с Instance Name = tn_url . Тук на това поле ще се изписва линка който ще зададем в .xml и който ще се отваря при натискане на някоя от картинките.

 

5. Правим 3-ти Layer с име Actions и на него на фрейма слагаме кода:

 

/*
Created by d0brin
DPProductions
*/
import org.papervision3d.scenes.*;
import org.papervision3d.cameras.*;
import org.papervision3d.objects.*;
import org.papervision3d.materials.*;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import flash.display.Sprite;
import flash.events.MouseEvent;

var container:Sprite = new Sprite();
container.x = stage.stageWidth * 0.5;
container.y = 160;
addChild(container);

var scene:Scene3D = new MovieScene3D(container);
var cam:Camera3D = new Camera3D();
cam.zoom = 6.5;

tn_title.text = "";
tn_desc.text = "";
tn_url.text = "";

var p_dict:Dictionary=new Dictionary();
var pc:Plane = new Plane();
pc.visible = false;
cam.target = pc;

var numOfRotations:Number = 2;
var yPos:Number = 0;
var angle:Number = 0;

var filename_list = new Array();
var url_list = new Array();
var url_target_list:Array = new Array();
var title_list = new Array();
var description_list = new Array();
var folder:String = "thumbnails/";

var i:Number;
var j:Number = 0;
var k:Number = 0;
var l:Number = 0;
var m:Number = 0;
var total:Number;
var flashmo_xml:XML = new XML();
var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("thumbnail_list_2.xml"));
loader.addEventListener(Event.COMPLETE, create_thumbnail);

function create_thumbnail(e:Event):void 
{
    flashmo_xml = XML(e.target.data);
    total = flashmo_xml.thumbnail.length();
    var anglePer:Number = ((Math.PI*2) * numOfRotations) / total;
 
    for( i = 0; i < total; i++ )
 {
     url_list.push( flashmo_xml.thumbnail[i].@url.toString() );
     url_target_list.push( flashmo_xml.thumbnail[i].@target.toString() );
     title_list.push( flashmo_xml.thumbnail[i].@title.toString() );
     description_list.push( flashmo_xml.thumbnail[i].@description.toString() );
  
  var bfm:BitmapFileMaterial = new BitmapFileMaterial(
  folder + flashmo_xml.thumbnail[i].@filename.toString());
  bfm.oneSide = false;
  bfm.smooth = true;
  var p:Plane = new Plane(bfm, 140, 105, 2, 2);
  scene.addChild(p);
  var p_container:Sprite = p.container;
  p_container.name = "flashmo_" + i;
  p_dict[p_container] = p;

  p_container.buttonMode = true;
  p_container.addEventListener( MouseEvent.ROLL_OVER, p_rollover );
  p_container.addEventListener( MouseEvent.ROLL_OUT, p_rollout );
  p_container.addEventListener( MouseEvent.CLICK, p_click );
  
  if( i < 6 )
  {
  if( i < 3 )
  {
  p.y = 10;
  }
  else
  {
  p.y = -100;
  j = j % 3;
  }
  p.x = j * 150 - 150;
  p.z = -225;
  j++;
  }
  else if( i < 12 )
  {
  if( i < 9 )
  {
  p.y = 10;
  }
  else
  {
  p.y = -100;
  k = k % 3;
  }
  p.x = 225;
  p.z = k * 150 - 150;
  p.rotationY = -90;
  k++;
  }
  else if( i < 18 )
  {
  if( i < 15 )
  {
  p.y = 10;
  }
  else
  {
  p.y = -100;
  l = l % 3;
  }
  p.x = 150 - l * 150;
  p.z = 225;
  p.rotationY = 180;
  l++;
  }
  else if( i < 24 )
  {
  if( i < 21 )
  {
  p.y = 10;
  }
  else
  {
  p.y = -100;
  m = m % 3;
  }
  p.x = -225;
  p.z = 150 - m * 150;
  p.rotationY = 90;
  m++;
  }
 }
}

function p_rollover(me:MouseEvent) 
{
 var sp:Sprite = me.target as Sprite;
 var tw1:Tween = new Tween(sp, 'scaleX', Strong.easeOut, 1, 1.14, 0.5, true);
 var tw2:Tween = new Tween(sp, 'scaleY', Strong.easeOut, 1, 1.14, 0.5, true);
 var s_no:Number = parseInt(sp.name.slice(8,10));
 tn_title.text = title_list[s_no];
 tn_desc.text = description_list[s_no];
 tn_url.text = url_list[s_no];
}
function p_rollout(me:MouseEvent) 
{
 var sp:Sprite = me.target as Sprite;
 var tw1:Tween = new Tween(sp, 'scaleX', Strong.easeOut, 1.14, 1, 0.5, true);
 var tw2:Tween = new Tween(sp, 'scaleY', Strong.easeOut, 1.14, 1, 0.5, true);
 tn_title.text = "";
 tn_desc.text = "";
 tn_url.text = "";
}
function p_click(me:MouseEvent) 
{
 var sp:Sprite = me.target as Sprite;
 var s_no:Number = parseInt(sp.name.slice(8,10));
 navigateToURL(new URLRequest(url_list[s_no]), url_target_list[s_no]);
}

addEventListener(Event.ENTER_FRAME, render);

function render(e:Event):void
{
 var dist2:Number = ((stage.mouseX) - stage.stageWidth * 0.5) * 0.00018;
 angle += dist2;
 cam.x = Math.cos(angle) * 900;
 cam.z = Math.sin(angle) * 900;
 var new_zoom = 10 - stage.mouseY * 0.015; 
 cam.zoom += ( new_zoom - cam.zoom ) * 0.05;
 cam.y = - cam.zoom * 90 + 650;
 scene.renderCamera(cam);
}

 


Страници: 1 2 »

Коментари (6)

d0brin на 22.04 2009 в 14:59ч.
ТУка можете да видите как изглежда галерията като е интегрирана във УебСайт:

http://dpproductions.110mb.com/aisndownloads/
dainov на 17.07 2009 в 15:53ч.
Всичко е супер, но не мога да го подкарам... изкарва ми 18 грешки, пробвах и AS 2 и 3... все същото... липсват ми добавки най-вероятно... Ето и списък на грешките
The class or interface 'flash.display.Sprite' could not be loaded.
The class or interface 'Scene3D' could not be loaded.
The class or interface 'Camera3D' could not be loaded.
The class or interface 'Dictionary' could not be loaded.
The class or interface 'Plane' could not be loaded.
The class or interface 'URLLoader' could not be loaded.
The class or interface 'Event' could not be loaded.
Expected a field name after '.' operator.
1172: Definition org.papervision3d.scenes could not be found.
1046: Type was not found or was not a compile-time constant: Scene3D.
1180: Call to a possibly undefined method BitmapFileMaterial.
ilstmo на 27.08 2009 в 13:46ч.
dainov успя ли да решиш проблема и как? Че и при мен се получава така :(
d0brin на 06.01 2010 в 20:09ч.
свали файловете и виж там :)
eduard19916766 на 12.05 2010 в 21:58ч.
За човек който не е работил с тази програма е невъзможно да изпълни задачата.Аз лично се опитах и стигнах до " Под него направете още едно Dynamic Field".
grep на 21.07 2010 в 00:29ч.
Добавеният код посмъртно няма да тръгне, освен ако не си изтеглите готовите библиотеки от http://code.google.com/p/papervision3d/downloads/list и после ги добавите към настройките на Флаш. Обаче и там Ви чака изненада - последните версии са за екшънскрипт 3, а авторът(d0brin) ползва класове, който са стари и премахнати от последните версии(MovieScene3D). Ако изтеглите версиите за 2 (от т.нар. svn repository), ще видите, че авторът(d0brin) използва в кода си класове от 3 - URLLoader. Според мен кодът е пълна каша между екшънскрипт 2 и 3, освен ако няма някоя настройка на Флаш да публикува в съвместим режим.

Регистрирайте се, за да добавите коментар


Калдейта ЕООД - © 2003-2010. Всички права запазени.
Препоръчваме: IT Новини