Efekt KSIĄŻKI

Technologia Flash, czyli animacja na potrzeby stron WWW to świat daleko odbiegły od zwykłego programowania i kodu. Zapytaj o pomoc i podziel się z nami Twoimi problemami z zakresu Flasha.
Larisa
Posty: 7
Rejestracja: ndz lip 31, 2005 2:32 pm

Efekt KSIĄŻKI

Post autor: Larisa »

Witajcie szanowni eksperci!!! :wink:

Dopiero zaczynam swoją przygodę z flashem ale zależy mi bardzo mocno na zrobieniu pamiętnika w formie książki. (coś identycznego jak to: http://www.pes4.de/eng/flash.htmlczy to:http://www.elitenet.pl/go/index.php

Jak można coś takiego zrobić??

Czy istnieje jakiś tutorial najlepiej w języku polskim (najlepiej krok po kroku!)?


Pozdrawiam serdecznie

Larisa :wink:
Marek_bf
Administrator
Posty: 4419
Rejestracja: czw lut 24, 2005 2:14 am
Kontakt:

Re: Efekt KSIĄŻKI

Post autor: Marek_bf »

Jak dopiero zaczynasz przygodę z Flashem to zapomnij o takich rzeczach. Jest kilka sposobów na uzyskanie takiego efektu jednak każdy z nich bazuje na Action Scripcie, symetrii, efekcie luster i maskowaniu. W podanym przykładzie dochodzi również dynamiczne (AS) rysowanie gradientów. To jest część przykładowego kodu takiej książki:

Kod: Zaznacz cały

//
//  P i X E L W i T . C O M
//
stop();
//
//
//
//
//
//________________________C O M M E N T S
//
// Thought to self:
// Try naming functions according to the events which preclude them
//
//
// A page flip involves 3 pieces of paper
// 2 bottom static pages (which lay flat at all times)
// and 1 active flipping page (which has 2 sides)
// Four pages total, 2 static/stationary and 2 flipping
// The flipping page can be on the left or right side
// The top image on the flipping page doesn't actually move
//
//
//
//
//
//_________________________V A R I A B L E S 
//
// Store a constant reference to this clip on the main timeline so
// clip can be referenced from any other timeline as _level0.pagesAbs
_level0.pagesAbs = this;
// Set page dimensions
var pageWi = 200;
var PageHi = 300;
var pageWiHi = pageWi + pageHi;
var pivotY = pageHi / 2 + pageWi;
var pageColor = 0xFFFFE5;
// "dir" equals either 1 or -1 and determines if you
// are flipping forward or backward through the book
var dir = 1;
// "flipPage" is the # "between" the two flipping page #'s
var flipPage = 1.5;
// "curPage" is the # between the two currently viewed page #'s
var curPage = .5;
// "maxPages" should be an even number
var maxPages = 8;
// "autoStep" percentage of page width determining step size when auto-closing
var autoStep = .05;
// "dragging" is true if you are dragging the page
var dragging = false;
//
//
//
//
//
//________________________________R U N   O N C E
//
// Place Left and Right page flip Buttons
this.attachMovie("cornerButton", "RButton", 11);
with (RButton) {
	_x = pageWi;
	_y = -pageWi;
}
this.attachMovie("cornerButton", "LButton", 12);
with (LButton) {
	_x = -pageWi;
	_y = -pageWi;
	_xscale = -100;
}
//
//
// Build pages for first time
pageInit(flipPage, dir);
// Drop down to appear centered
_y += pivotY;
//
//
//
//
//
// _____________________B U I L D   F U N C T I O N S
//
// Create a left-aligned page-sized solid fill raised one pagewidth
function makePage(targ, xQuadrant) {
	with (targ) {
		beginFill(pageColor, 100);
		moveto(0, -pageWi);
		lineto(0, -pageWiHi);
		lineTo(xQuadrant * pageWi, -pageWiHi);
		lineTo(xQuadrant * pageWi, -pageWi);
		endFill();
	}
}
//
//
// Create a left-aligned page-sized shadow gradient raised one pagewidth
// Shade is used to add depth to stationary pages
function makeShade(targ, xQuadrant) {
	with (targ) {
		// Defines gradient used as shadow overlay
		var colors = [0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000];
		var alphas = [40, 25, 15, 5, 0, 1, 6];
		var ratios = [0, 1, 17, 51, 89, 132, 255];
		var matrix = {matrixType:"box", x:0, y:pageWi, w:xQuadrant * pageWi, h:pageHi, r:0};
		beginGradientFill("linear", colors, alphas, ratios, matrix);
		moveto(0, -pageWi);
		lineto(0, -pageWiHi);
		lineTo(xQuadrant * pageWi, -pageWiHi);
		lineTo(xQuadrant * pageWi, -pageWi);
		endFill();
	}
}
//
//
// create a bottom-left aligned shadow gradient
// for animated shadows
function makeShadow(targ, xQuadrant) {
	with (targ) {
		// Defines gradient used as shadow overlay
		var colors = [0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000];
		var alphas = [40, 25, 15, 5, 0, 1, 6];
		var ratios = [0, 1, 17, 51, 89, 132, 255];
		var maxLength = Math.sqrt((pageWi * pageWi) + (pageWIHi * pageWiHi));
		var matrix = {matrixType:"box", x:0, y:-maxLength, w:xQuadrant * pageWi, h:maxLength - pageWi, r:0};
		beginGradientFill("linear", colors, alphas, ratios, matrix);
		moveto(0, -pageWi);
		lineto(0, -maxLength);
		lineto(xQuadrant * pageWi, -maxLength);
		lineTo(xQuadrant * pageWi, -pageWi);
		endFill();
	}
}
//
//
// Place Stationary Pages
function setStationary() {
	// Place the "S"tationary "L"eft "P"age
	createEmptyMovieClip("SLPage", 1);
	if (flipPage != 1.5) {
		makePage(SLPage, -1);
		SLPage.attachMovie("print" + (flipPage - 1.5), "Print", 1);
		with (SLPage.Print) {
			_x = -pageWi / 2;
			_y = -pivotY;
		}
	}
	// Place the "S"tationary "R"ight "P"age
	createEmptyMovieClip("SRPage", 2);
	if (flipPage != maxPages - .5) {
		makePage(SRPage, 1);
		SRPage.attachMovie("print" + (flipPage + 1.5), "Print", 1);
		with (SRPage.Print) {
			_x = pageWi / 2;
			_y = -pivotY;
		}
	}
	// Place shade on page not being revealed
	var targ = dir > 0 ? SLPage : SRPage;
	targ.createEmptyMovieClip("Shade", 2);
	makeShade(targ.Shade, -dir);
}
// 
// 
// Place the Flipping Pages
function setFlipping() {
	var targ;
	// Place the "F"lipping "T"op "P"age
	createEmptyMovieClip("FTPage", 3);
	makePage(FTPage, dir);
	with (FTPage) {
		attachMovie("print" + (flipPage - dir * .5), "Print", 1);
		with (Print) {
			_x = dir * pageWi / 2;
			_y = -pivotY;
		}
	}
	FTPage.createEmptyMovieClip("Shade", 2);
	makeShade(FTPage.Shade, dir);
	// Place the "F"lipping "B"ottom "P"age
	createEmptyMovieClip("FBPage", 4);
	makePage(FBPage, -dir);
	FBPage.attachMovie("print" + (flipPage + dir * .5), "Print", 1);
	with (FBPage.Print) {
		_x = -dir * pageWi / 2;
		_y = -pivotY;
	}
	FBPage._rotation = dir * 90;
}
// 
// 
// Creates Shadows which follow edge of transition
function setShadows() {
	var targ;
	// Place shadow on the "F"lipping page
	this.createEmptyMovieClip("FShadow", 5);
	makeShadow(FShadow, -dir);
	FShadow._rotation = dir * 45;
	// Place shadow on the "S"tationary page
	this.createEmptyMovieClip("SShadow", 6);
	makeShadow(SShadow, dir);
	SShadow._rotation = dir * 45;
}
// 
// 
// Create Masks to hide everything
function makeMasks() {
	// Create mask for Flipping Bottom Page Mask
	this.createEmptyMovieClip("FBPageMask", 7);
	with (FBPageMask) {
		beginFill(0x005500, 100);
		lineto(pageWiHi, -PageWiHi);
		curveto(0, -2 * PageWiHi, -pageWiHi, -pageWiHi);
		endFill();
	}
	// Create mask for Flipping Top Page
	FBPageMask.duplicateMovieClip("FTPageMask", 8);
	// Create mask for Shadow on the Flipping Page
	this.createEmptyMovieClip("FShadowMask", 9);
	makePage(FShadowMask, -dir);
	FShadowMask._rotation = dir * 90;
	// Create mask for Shadow on Stationary Page
	this.createEmptyMovieClip("SShadowMask", 10);
	makePage(SShadowMask, dir);
	FBPage.setMask(FBPageMask);
	FTPage.setMask(FTPageMask);
	FShadow.setMask(FShadowMask);
	SShadow.setMask(SShadowMask);
}
//
//
// Hide pages before page1 and after Last Page
function limitBook() {
	if (flipPage == 1.5) {
		SLPage._visible = 0;
		LButton._visible = 0;
		SShadow._visible = 0;
		if (dir == 1) {
			FTPage.Shade._alpha = 67;
			SShadow._visible = 1;
		} else {
			FShadow._alpha = 67;
		}
	} else if (flipPage == maxPages - .5) {
		SRPage._visible = 0;
		RButton._visible = 0;
		SShadow._visible = 0;
		if (dir == -1) {
			FTPage.Shade._alpha = 67;
			SShadow._visible = 1;
		} else {
			FShadow._alpha = 67;
		}
	}
}
// 
// 
// How to position all pages needed for a page flip
// calls all functions listed above
function pageInit(cp, d) {
	flipPage = cp;
	dir = d;
	//trace ("flip page = "+flipPage+" dir = "+dir);
	setStationary();
	setFlipping();
	setShadows();
	makeMasks();
	limitBook();
}
// 
//
//
//
//
//__________________F L I P P I N G   F U N C T I O N S
//
// How to adjust position of flipping page
// based on a value between 0 and 1
function flip(curVal) {
	var rot = dir * 45 * curVal;
	FBPageMask._rotation = FTPageMask._rotation = -rot;
	FBPage._rotation = FShadowMask._rotation = (dir * 90) - rot * 2;
	FShadow._rotation = SShadow._rotation = (dir * 45) - rot;
}
//
//
// how to determine position of flipping page
// returns a value between 0 and 1
// zero being no-flip and one being full-flip
function getPageRatio() {
	if (dragging) {
		// if dragging page position is determined by mouse position
		// the 20 helps advance the turning page when the button is pressed
		pageRatio = -dir * (_xmouse - startX - dir * 20) / (2 * pageWi);
	} else {
		// if not dragging; auto increment page towards final position
		pageRatio > 2 / 3 ? pageRatio += autoStep : pageRatio -= autoStep;
	}
	// if out of bounds 
	if (pageRatio <= 0) {
		pageRatio = 0;
		if (!dragging) {
			flipDone();
		}
	} else if (pageRatio >= 1) {
		pageRatio = 1;
		if (!dragging) {
			flipDone();
		}
	}
	return (pageRatio);
}
// 
//
//
//
//
//_____________C O N T R O L I N G   F U N C T I O N S
//
// What to do when you press a page flipping button
function startFlip(dir) {
	pageInit(curPage + dir, dir);
	startX = dir * pageWi;
	dragging = true;
	RButton._alpha = 0;
	Lbutton._alpha = 0;
	this.onEnterFrame = function() {
		flip(getPageRatio());
	};
}
// 
//
// what to do when page is released
function flipRelease() {
	dragging = false;
	if (pageRatio > 2 / 3) {
		curPage += 2 * dir;
	}
}
//
//
// What to do when pages are done flipping
function flipDone() {
	this.onEnterFrame = null;
	RButton._alpha = 100;
	LButton._alpha = 100;
	if (curPage != .5) {
		LButton._visible = 1;
	}
	if (curPage != maxPages + .5) {
		RButton._visible = 1;
	}
	// Delete hidden pages to save resources
	if (pageRatio == 0) {
		FShadow.removeMovieClip();
		FShadowMask.removeMovieClip();
		SShadow.removeMovieClip();
		SShadowMask.removeMovieClip();
		FBPage.removeMovieClip();
		FBPageMask.removeMovieClip();
		if (dir == 1) {
			SRPage.removeMovieClip();
		} else {
			SLPage.removeMovieClip();
		}
	} else {
		FTPage.removeMovieClip();
		if (dir == -1) {
			SRPage.removeMovieClip();
		} else {
			SLPage.removeMovieClip();
		}
	}
	FTPageMask.removeMovieClip();
}
//
//
// assign functions to button events
LButton.onPress = function() {
	startFlip(-1);
};
LButton.onReleaseOutside = function() {
	flipRelease();
};
LButton.onRelease = function() {
	flipRelease();
};
RButton.onPress = function() {
	startFlip(1);
};
RButton.onReleaseOutside = function() {
	flipRelease();
};
RButton.onRelease = function() {
	flipRelease();
};
//
//
//
//
//
Więc sam widzisz, ze i tutorial tutaj nie pomoże :)
Fistach
Przelotem
Przelotem
Posty: 348
Rejestracja: sob maja 03, 2003 7:50 pm
Lokalizacja: Wroclaw

Re: Efekt KSIĄŻKI

Post autor: Fistach »

Marek_F jaką książke byś polecił do nauki AS??

Ten fragment jest z jakiej??
Marek_bf
Administrator
Posty: 4419
Rejestracja: czw lut 24, 2005 2:14 am
Kontakt:

Re: Efekt KSIĄŻKI

Post autor: Marek_bf »

To jest fragment kodu efektu przewracanej kartki. :) Nie widziałem go w żadnej książce.
Dobra książka o AS:
http://helion.pl/ksiazki/acscpe.htm
ODPOWIEDZ