最近想做一个SWF演示图片的程序,已经实现了第一个演示功能的效果:
http://www.singlestudio.net.cn/photoviewer/
然后,想要把这个算法放到function里,这样,多种算法可以封装到其它的文件中,不至于使主程序文件臃肿。
一开始,我是将所有关于
SWFBitmap(用于读取图片)
SWFShape(将图片嵌入指定区域)
SWFSprite(创建一个相当于FLASH软件中的影片的角色)
的代码都放在函数getit中(也就是下面代码中,get_b(),get_s(),get_p()的堆砌)。
但是不成功。
最后,抱着试试看的态度,将它们分开了。
分离SWFSprite成功;
分离SWFShape成功;
分离SWFBitmap[COLOR=red]失败[/COLOR]。
难道这个SWFBitmap不能用return来返回么?
欢迎大家讨论
<?php
function get_p($s)
{
$p=new SWFSprite();
// $p->add(new SWFAction("_visible=false;"));
$b = new SWFButton(); //TITLE BAR
$b->addShape($s,SWFBUTTON_UP|SWFBUTTON_HIT|SWFBUTTON_DOWN|SWFBUTTON_OVER);
$b->addAction(new SWFAction("startdrag('',false,300,300,0,0);"), SWFBUTTON_MOUSEDOWN);
$b->addAction(new SWFAction("stopdrag();"), SWFBUTTON_MOUSEUP);
$i=$p->add($b);
$i->moveto(0,0);
$p->nextframe();
return $p;
}
function get_s($b)
{
$s = new SWFShape();
$s->setLine(1, 0xff, 0x00, 0x00);
$scale= $s->addFill($b);
$scale->moveto(0,0);
$width=$b->getWidth()/5;$height=$b->getHeight()/5;
$xx=20;$yy=20;
$xx*=$width/$b->getWidth();
$yy*=$height/$b->getHeight();
$scale->scaleto($xx,$yy);
$s->setRightFill($scale);
$s->movePenTo(0,0);
$s->drawLine($width, 0);
$s->drawLine(0, $height);
$s->drawLine(-$width, 0);
$s->drawLine(0, -$height);
return $s;
}
function get_b()//这段代码,无法使用
{
$mfile="xx.jpg";
$fp=fopen($mfile,"r");
$string=fread($fp,filesize($mfile));
$b = new SWFBitmap($string);
fclose($fp);
return $b;////////////////////////这个return无效
}
/////////////////////////////////////////这段代码无法封装到函数中去
$mfile="xx.jpg";
$fp=fopen($mfile,"r");
$string=fread($fp,filesize($mfile));
$b = new SWFBitmap($string);
fclose($fp);
///////////////////////////////////////////////////这段代码无法封装到函数中去
$m = new SWFMovie();
$m->setBackground(0xff, 0xff, 0xff);
$m->setDimension(300,300);
$m->setrate(6);
$m->add(get_p(get_s($b)));
$m->nextFrame();
// $m->add(new SWFAction("stop();"));
$m->nextFrame();
header('Content-type: application/x-shockwave-flash');
$m->output();
// $m->save("viewer.swf");
?>
另:
在PHP.NET找了半天,没有类似情况。
就report了一下:
http://bugs.php.net/bug.php?id=45371