天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP生成Flash動畫的實現(xiàn)代碼

其中有一組映射到 SWF 動畫中的數(shù)據(jù)類型的對象:子圖形、圖形、文本、位圖等等。在本文中,我使用了預(yù)編譯的擴(kuò)展 php_ming.dll 庫用于 Windows 版本的 php

清單 2 顯示了使用 Ming 庫實現(xiàn)的 HelloWorld 示例。


清單 2. Hello.php
				
<?php
$f = new SWFFont( '_sans' );

$t = new SWFTextField();
$t->setFont( $f );
$t->setColor( 0, 0, 0 );
$t->setHeight( 400 );
$t->addString( 'Hello World' );

$m = new SWFMovie();
$m->setDimension( 2500, 800 );
$m->add( $t );

$m->save( 'hello.swf' );
?>

在命令行中運(yùn)行這段代碼將生成文件 hello.swf。當(dāng)我在 Web 瀏覽器中打開該文件時,看到了圖 1 所示的結(jié)果。


圖 1. 使用 Ming 的 HelloWorld 示例
使用 Ming 的 HelloWorld 示例

回過頭來查看這段代碼,我做的第一件事是創(chuàng)建指向一個內(nèi)置字體(_sans)的指針,然后創(chuàng)建文本字段,設(shè)定字體、顏色和大小,最后為其提供 一些文本內(nèi)容(“Hello World”)。再接下來創(chuàng)建了一個 SWFMovie 對象并設(shè)定其尺寸。最后,向動畫中添加了文本元素并將動畫保存到文件中。

作為直接構(gòu)建文件的替代性方法,也可以使用下面的代碼,使 SWF 動畫像頁面那樣輸出,而無需使用 save 方法:

header( 'Content-type: application/x-shockwave-flash' );
$m->output( );

此過程類似于使用 php 中的 ImageMagick 庫來構(gòu)建位圖。對于所有 Ming 示例,我都將使用 save 方法,但您可以根據(jù)喜好來選擇是否使用 save 方法。

讓文本動起來

只是將一些文本放入 Flash 動畫中是沒有多大意義的,除非您能讓它動起來。因此我整合了清單 2 中的示例,它包括兩段文本:一部分開始很小后來變得越來越大,而另一部分保持靜態(tài)。


清單 3. Text.php
				
<?php
$f = new SWFFont( '_sans' );

$pt = new SWFTextField();
$pt->setFont( $f );
$pt->setColor( 0, 0, 0 );
$pt->setHeight( 400 );
$pt->addString( '1000' );

$tt = new SWFTextField();
$tt->setFont( $f );
$tt->setColor( 192, 192, 192, 90 );
$tt->setHeight( 350 );
$tt->addString( 'Points' );

$m = new SWFMovie();
$m->setDimension( 2500, 800 );

$pts = $m->add( $pt );
$pts->moveTo( 0, 0 );

$tts = $m->add( $tt );
$tts->moveTo( 1300, 200 );

for( $i = 0; $i < 10; $i++ ) {
$m->nextframe();
$pts->scaleTo( 1.0 + ( $i / 10.0 ), 1.0 + ( $i / 10.0 ) );
}

$m->save( 'text.swf' );
?>

在命令行中執(zhí)行這段代碼時,它將生成 text.swf。在 Web 瀏覽器中打開該文件時,我看到了圖 2 所示的圖片。


圖 2. text.swf 文件
text.swf 文件

文本 “1000” 開始時很小,大小為 350 個點。然后使用 scaleTo() 方法使其增大為 750 個點,方法是對動畫對象使用 nextframe() 方法。

要理解其工作原理,需要了解一點 Flash 制作動畫的方法。Flash 中的動畫就像電影中的動畫一樣運(yùn)行:按幀運(yùn)行。子圖形將按幀在動畫框架中移動。一個主要差別是 Flash 不獲取每幀的快照。它存儲子圖形對象在每幀的狀態(tài)。

您可能會注意到,我有一個名為 $pt 的變量,該變量具有文本 “1000”。隨后當(dāng)我把 $pt 添加到動畫中時,獲得了通過 add() 方法返回的名為 $pts 的新對象。該對象是 SWFDisplayItem, 表示子圖形的實例。然后我可以圍繞動畫框架的表面逐幀移動實例。 這有點兒混亂,但我可以擁有同時移動的多個版本的 “1000” 文本子圖形或 “points” 文本子圖形。

繪制一些圖形

接下來要處理的是矢量圖形。首先僅繪制一條簡單的直線,它從框架的左側(cè)頂部到右側(cè)底部。


清單 4. Line.php
				
<?php
$m = new SWFMovie();
$m->setDimension( 300, 300 );

$s = new SWFShape();
$s->setLine( 10, 0, 0, 0 );
$s->movePenTo( 10, 10 );
$s->drawLiNETo( 290, 290 );
$m->add( $s );

$m->save( 'line.swf' );
?>

在命令行中運(yùn)行此腳本,然后查看輸出的 .swf 文件,效果如圖 3 所示。


圖 3. 繪制簡單的直線
繪制簡單的直線

好的 ―― 這十分簡單,也不怎么令人激動。那么我做了什么?創(chuàng)建了一個新的 SWFShape 對象,然后向其中添加了一些筆觸移動和直線。然后我將其作為子圖形添加到了動畫中。

為了讓它變得更有趣,我使用了與剛才文本中使用的相同的幀式動畫。但在本例中,我用下面所示的代碼使這條直線圍繞動畫的中心旋轉(zhuǎn)。


清單 5. 旋轉(zhuǎn)直線
				
<?php
$m = new SWFMovie();
$m->setDimension( 300, 300 );

$s = new SWFShape();
$s->setLine( 5, 0, 0, 0 );
$s->movePenTo( -100, -100 );
$s->drawLiNETo( 100, 100 );
$ts = $m->add( $s );

$ts->moveTo( 150, 150 );

for( $i = 0; $i < 100; $i++ ) {
$ts->rotate( 10 );
$m->nextframe();
}

$m->save( 'rotate.swf' );
?>

在本例中,我從 -100, -100 到 100, 100 畫了一條直線。這將把直線的中心放在坐標(biāo) 0,0 處。這樣,當(dāng)我在旋轉(zhuǎn)圖形時,直線的中心將發(fā)生旋轉(zhuǎn)。

當(dāng)我向動畫中添加圖形時,將移動返回到框架中心的 SWFDisplayItem。然后用 rotate() 方法使它旋轉(zhuǎn)并每旋轉(zhuǎn)一周就增大其框架。

使用圖片

文本和諸如直線、圓、弧、曲線和矩形之類的簡單矢量圖形都是十分優(yōu)秀的,但在理想的情況下,您必須能訪問這些 Flash 動畫中的圖片。值得慶幸的是,Ming 庫使您可以輕松的使用圖片,如下所示。


清單 6. 使用圖片
				
<?php
$img = new SWFBitmap( file_get_contents( 'megan.jpg' ) );

$s = new SWFShape();
$imgf = $s->addFill( $img );
$s->setRightFill( $imgf );
$s->movePenTo( 0, 0 );
$s->drawLiNETo( $img->getWidth(), 0 );
$s->drawLiNETo( $img->getWidth(), $img->getHeight() );
$s->drawLiNETo( 0, $img->getHeight() );
$s->drawLiNETo( 0, 0 );

$m = new SWFMovie();
$m->setDimension( $img->getWidth() * 2, $img->getHeight() * 2 );
$is = $m->add( $s );
$is->moveTo( $img->getWidth() / 2, $img->getHeight() / 2 );

for( $i = 0; $i < 10; $i++ )
{
$is->skewx( 0.02 );
$is->skewy( -0.03 );
$m->nextframe();
}

$m->save( 'image.swf' );
?>

在命令行中運(yùn)行此腳本并在瀏覽器中查看 image.swf,結(jié)果如圖 4 所示。


圖 4. 生成的圖片動畫
生成的圖片動畫

此腳本在開始時讀取了本地的 .jpeg 文件(在本例中,是我女兒 Megan 的照片)。然后創(chuàng)建一個矩形,并在其中填充圖片。在那之后,它在10 幀處使用了位移效果使圖片稍微移動

繼續(xù)移動

我只是觸及了 Ming 庫可為您提供的操作的表面。在這里我沒有展示交互部分,在交互部分您可以將簡單的腳本與元素連接起來。(但是,如果換成是交互操作,如果您有一個十分復(fù)雜 的 Flash 動畫,則可能需要考慮使用 Flash 開發(fā)工具來構(gòu)建 Web 應(yīng)用程序內(nèi)與 Web 服務(wù)對話的 Flash 動畫。)

構(gòu)建更加復(fù)雜的 Flash 動畫的另外一種選擇是使用諸如 Adobe Flex 或 Laszlo 之類的制作工具,這兩種工具都提供了用于為 Flash 動畫的用戶界面布局的 XML 語法以及一個更輕松地例程,可用于開發(fā)為界面提供互動操作的 JavaScript。

php技術(shù)PHP生成Flash動畫的實現(xiàn)代碼,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产乱码免费卡1卡二卡3卡四卡 | 羞羞答答的免费视频在线观看 | 国产WW高清大片免费看 | 百性阁综合社区 | 国产久久re6免费热在线 | 亚洲伊人精品综合在合线 | 尹人久久大香找蕉综合影院 | 日日操日日射 | 成人伊人青草久久综合网 | 亚洲电影成人 成人影院 | 考好老师让你做一次H | 色戒无删减流畅完整版 | 狠很橹快播 | 黄色三级三级三级免费看 | 成年黄网站免费大全毛片 | 美女被强奷到抽搐的动态图 | FREE17一18外女破 | 干极品美女 | 亚洲免费视频在线 | 给我免费播放片bd国语 | 国产精品久久一区二区三区蜜桃 | 久久久亚洲国产精品主播 | 久久九九有精品国产23百花影院 | 好男人WWW免费高清视频在线 | 国产成人在线播放 | 玩弄放荡人妻一区二区三区 | 野花日本高清在线观看免费吗 | 亚洲大片在线观看 | 日本午夜精品久久久无码 | 伊人久久综在合线亚洲 | 日本理论片和搜子同居的日子2 | 欧美激情一区二区三区AA片 | 污污内射久久一区二区欧美日韩 | 俄罗斯6一9泑女网站 | 欧美一级成人影院免费的 | 无遮18禁在线永久免费观看挡 | 无敌在线视频观看免费 | 琪琪婷婷五月色综合久久 | 果冻传媒在线观看视频 | 日韩精品欧美亚洲高清有无 | 少妇系列之白嫩人妻 |