DFdou's Blog Life is short,Be yourself.

3103/090

Flash-ENTER_FRAME,Timer,setInterval,setTimeout AND frameRate

ENTER_FRAME跟帧频直接相关,而Timer和setInterval,setTimeout则和帧频完全木有关系,另外,Flash CS3帮助文档中推荐使用Timer而不要再使用setInterval,setTimeout,setInterval可以用Timer直接代替,而setTimeout可以用Timer(xxx,1)代替。
用于测试的代码如下,PS:Flash帧频设置为1。

//ENTER_FRAME 每秒输出一个enterframe
btn_e.addEventListener (MouseEvent.CLICK,showEnterframe);
function showEnterframe (_vet:MouseEvent) {
	stage.addEventListener (Event.ENTER_FRAME,enterframe);
	function enterframe (_evt:Event) {
		trace ("enterframe");
	}
}

//Timer 每10毫秒输出一个timer
btn_t.addEventListener (MouseEvent.CLICK,showTimer);
function showTimer (_vet:MouseEvent) {
	var t:Timer=new Timer(10);
	t.addEventListener (TimerEvent.TIMER,timer);
	t.start ();
	function timer (_evt:TimerEvent) {
		trace ("timer");
	}
}
//setInterval
btn_i.addEventListener (MouseEvent.CLICK,showInterval);
function showInterval (_vet:MouseEvent) {
	var i=setInterval(showI,1000);
	function showI () {
		trace ("setInterval");
	}
}

Flash里帧频的极限是0.01-120,如果设置超过了,Flash Player将使用它能达到的最大帧频或者最小帧频运行。
Flash中无法达到很精确的时间,因为这跟运行Flash的硬件有很大的关系。

3003/090

Flash-相册生成工具FIG

官方地址:http://www.flashimagegallery.com/
这玩意儿可以通过选择添加图片文件夹直接生成Flash Gallery,配置文件是XML,另外还有Fla源程序,虽然看起来是反编译出来的……
看更新日志,FIG是January 18, 2004产生的……而且最后的更新是在October 16th, 2005,不过关系不大,个人测试了下挺稳定。(话说,还能怎么个不稳定法…)
如果只是一次性生成Flash,而无法方便修改,那就没什么用了对吧。所以呢,FIG还提供了相册的管理后台,可以方便的修改图片信息,以及后期维护。
来段官方介绍:
The FIG is a gallery application that can be used by anyone to display multiple galleries of photos, artwork, or other pictures with descriptions. It requires no server-side language and will run on any web host. It is idealy suited for artists with online galleries, but can be used by anyone.
呀,如果就这样结束的话,这个文章也太短了点,发下官方说的Tips吧:
Some Tips
* All images must be unoptimized, unprogressive jpegs. 请优化图片,落后的jpeg?
* The file makeGallery.exe is wonderful!!! USE IT. Make sure it is in the same folder as gallery.swf and run the program. Select your picture folder from your harddrive and it will copy the images to the FIG folder and create the thumbnails. The gallery creator is brought to you by Muffin.使用时请确定makeGallery.exe和gallery.swf在同一个目录下,选择导入的图片目录会自动复制到该目录下。
* Thumbnails in the gallery are 148 pixels wide and 116 pixels high. If the thumbnail is smaller it will be centered. If it is larger only the viewable amount will be displayed.缩略图是148x116大小,如果原图比这个规格的话,会居中显示该图,边上填充白色,如果大于这个规格,则按照比例缩小。*我看了下实际大小好象是148x148规格,而不是148x116?
* The splash image or swf is 609 pixels wide and 368 pixels high.大图的大小609x368
* Descriptions can currently only be plain text.描述现在只能是文本
* In menu.xml it is best to use all caps for the name of image galleries for display purposes.菜单部分,测试发现中文会乱码。

Tagged as: , , No Comments
2903/090

Flex-AMFPHP数据交互

flex和amfphp的交互
话说Flex和AMFPHP的交互,一搜一大堆,但是得到的结果都莫名的有那么点复杂。

2803/090

WordPress Plugins-Optimize DB

Optimize DB
optimize db
很简单的一个插件,唯一的功能就是优化你的数据库,安装启用该插件后,在设置里边也仅仅只有一个按钮……
哈,今天的日志就是这么简单 :chaocai

2603/091

PHP-Web Client Class Snoopy

第1次看到Snoopy这个类是在Xiaonei的开放平台的PHP客户端上,当时很奇怪怎么会把类名命名成Snoopy,莫非程序员是个Snoopy控?
到今天在网上找资料的时候才忽然发现,原来Snoopy是个PHP的Web Client Class,那么这个东西具体可以干些啥呢?
资料来自http://www.linvo2008.cn/blog/?p=260
功能如下:
1、抓取网页的内容 fetch
2、抓取网页的文本内容 (去除HTML标签) fetchtext
3、抓取网页的链接,表单 fetchlinks fetchform
4、支持代理主机
5、支持基本的用户名/密码验证
6、支持设置 user_agent, referer(来路), cookies 和 header content(头文件)
7、支持浏览器重定向,并能控制重定向深度
8、能把网页中的链接扩展成高质量的url(默认)
9、提交数据并且获取返回值
10、支持跟踪HTML框架
11、支持重定向的时候传递cookies

2503/0910

AS3-留言板制作全过程-实现篇

恩,话说刚弄好的留言板,恩……代码基本上是没有经过任何优化……
先来讲下用到的第三方类:
1.ToolTip类: 鼠标提示类,Author: ATHER Shu 2008.7.15
2.TweenLite类,很有名一个的缓动类了,官方网站:http://www.TweenLite.com 。
另外就是实现的工具,是PHP和MYSQL,PHP方面是通过AMFPHP来实现。
接下去,鬼扯下代码部分,整个留言板的过程是这样,先从数据库获得总的页数,然后再获得数据集,接着就是显示内容。
先从菜单栏开始讲,这部分除了“加入到收藏夹”部分,就是搜索部分了。
1.收藏夹部分的实现请参考这个这里:Flash-Bookmark(AddFavorite)加入收藏夹代码
2.搜索的过程和一开始的载入很相似,只不过比开始的载入多了个数据库查询条件的限制,所以这部分的代码参考开始部分就可以了。
添加留言内容的部分,主要代码集中在头像的出现和消失方式,为了让头像选择显得新颖点,弄了半天,现在的效果看起来不错,嘿嘿。
显示留言内容的代码很简单,略过,管理员留言内容的部分也同理掠过。

2403/093

AS3-留言板制作全过程-界面篇

留言板地址:http://guestbook.nwhy.org/
新版本(AS3版)界面:
留言板

2303/090

Flash-Bookmark(AddFavorite)加入收藏夹代码

效果可以看留言板的收藏夹功能。
网上找了下加入收藏夹代码,很多都是AS2的,直接getURL()执行JS,不过貌似那个方法只支持IE,要想兼容各浏览器,还得借助JS。
放个网上找来的兼容FF,Opera,IE的JS加入收藏夹代码:

<script type="text/javascript">
// < ![CDATA[
function bookmark(){
	var title=document.title;
	var url=document.location.href;
	if (window.sidebar){//firefox
		window.sidebar.addPanel(title, url,"");
	}else if(window.opera){//opera
		var mbm = document.createElement('a');
		mbm.setAttribute('rel','sidebar');
		mbm.setAttribute('href',url);
		mbm.setAttribute('title',title);
		mbm.click();
	}else if(window.external){//ie
		window.external.AddFavorite(url, title);
	}else{
		alert('Unfortunately, your browser does not support this action,please bookmark this page manually by pressing Ctrl + D on PC or Cmd + D on Mac.');
	}
}
// ]]>
</script>

Flash里的调用函数很简单:

btn.addEventListener(MouseEvent.CLICK,addToFav);
btn.buttonMode=true;
function addToFav(_evt:MouseEvent){
	ExternalInterface.call("bookmark");
}
2203/090

GAME-NamePK 基于MD5的名字PK(下)

上接:“GAME-NamePK 基于MD5的名字PK(上)
Source Code:

import org.nwhy.Player;
//这个是As3CoreLib里的工具类
import com.adobe.utils.StringUtil;
import gs.TweenLite;

btnStart.buttonMode=true;
btnStart.addEventListener (MouseEvent.CLICK,gameStart);
//开始游戏
function gameStart (_evt:MouseEvent) {
	var p1Name:String=trimStr(inputP1.text);
	var p2Name:String=trimStr(inputP2.text);
	if (checkPName (p1Name) && checkPName (p2Name)) {
		txtInfoShow.text="";
		btnStart.buttonMode=false;
		btnStart.removeEventListener (MouseEvent.CLICK,gameStart);
		var p1=new Player(p1Name);
		initPlayer(p1,mcP1);
		var p2=new Player(p2Name);
		initPlayer(p2,mcP2);
		if(p1.getDex()>=p2.getDex()){
			txtInfoShow.appendText("比对敏捷值  "+p1.getName()+"  获得优先攻击权 \n");
			setTimeout(doPK,2000,p1,p2);
		}else{
			txtInfoShow.appendText("比对敏捷值  "+p2.getName()+"  获得优先攻击权 \n");
			setTimeout(doPK,2000,p2,p1);
		}
	} else {
		txtInfoShow.appendText("请输入名字!\n");
	}
}
//初始化角色
function initPlayer(_player:Player,_mc:MovieClip){
	_player.setBindMC(_mc);
	setTxt(_mc.txtName,String(_player.getName()));
	setTxt(_mc.txtHp,String(_player.getHp()));
	setTxt(_mc.txtStr,String(_player.getStr()));
	setTxt(_mc.txtDex,String(_player.getDex()));
	TweenLite.to(_mc.hp,0.3,{width:_player.getHp()/5< &lt;0});
	TweenLite.to(_mc.str,0.3,{width:_player.getStr()*2});
	TweenLite.to(_mc.dex,0.3,{width:_player.getDex()*2});
}
function doPK(_p1:Player,_p2:Player){
	attack(_p1,_p2);
	if(_p2.isAlive()){
		setTimeout(doPK,1000,_p2,_p1);
	}
}
//攻击函数
function attack(_p1:Player,_p2:Player){
	var p1AttackValue:Array=_p1.attack();
	gameInfoShow(txtInfoShow,p1AttackValue[1],p1AttackValue[0],_p1);
	if(_p1.getRate()>_p2.getRate()){
		_p2.setHp(_p2.getHp()-p1AttackValue[0]);
  		if(_p2.isAlive()){
			setTxt(_p2.getBindMC().txtHp,String(_p2.getHp()));
			TweenLite.to(_p2.getBindMC().hp,0.3,{width:_p2.getHp()/5< &lt;0});
		}else{
			setTxt(_p2.getBindMC().txtHp,"死亡");
			TweenLite.to(_p2.getBindMC().hp,0.3,{width:0});
			txtInfoShow.appendText(_p2.getName()+"  被扁趴下  "+_p1.getName()+"  获得胜利 \n");
			btnStart.buttonMode=true;
			btnStart.addEventListener (MouseEvent.CLICK,gameStart);
		}
	}else{
		txtInfoShow.appendText("但是  "+_p2.getName()+"  闪开了 \n");
	}
}
//文本设置
function setTxt(_txt:TextField,_str:String){
	_txt.text=_str;
}
//显示PK实况
function gameInfoShow(_txt:TextField,_style:String,_str:uint,_player:Player){
	_txt.appendText(_player.getName()+"  "+_style+"  伤害值为  "+_str+"\n");
}
//简单的见车名字输入
function checkPName (playerName:String):Boolean {
	if (playerName=="") {
		return false;
	} else {
		return true;
	}
}
//去左右空格函数
function trimStr(_str:String){
	return StringUtil.trim(_str);
}

相对来说主要就是攻击的顺序判断,攻击的命中,还有游戏是否结束的判断。
Source files here:http://dl.getdropbox.com/u/477487/flash/game/namePK.rar

2103/092

GAME-NamePK 基于MD5的名字PK(上)

先上Demo:

2003/092

AS3-Copy Mirror Image 复制图像镜像

From http://bbs.actionscript3.cn/viewthread.php?tid=9627&extra=&page=1 Comment 15#
原本以为这个东西挺复杂的,看了下15楼大大的回复,才发现原来只要这么些代码。
主要的内容是Graphics跟BitmapData的操作。
Demo:

1903/090

Advanced ActionScript 3 with Design Patterns 学习笔记-一些命名规范

尽管变量和函数的命名限制很少,简单的说就是“In each case, you can use only letters, numbers, dollar signs ($), and underscores (_) and the first character must not be a number.”可以使用字母,数字,美元符号,下划线,首字母不要是数字就可以了。
尽管如此,为了团队间或者说以后的可维护性着想,我们应该尽可能的使用规范的命名规则。
其实如果你愿意,基本上所有的命名都可以参考JAVA语言的命名规则。
以一个变量的命名来举例,比方:

var city:Map;

city是Map类的一个实例,虽然这么命名并没有什么错误,但是city让人首先联想到的应该是城市,而不是Map类,可读性就比较差了。对于这个情况,可以这样命名:

var cityMap:Map;

这样就容易理解多了,对吧。
具体的变量命名其实也看具体情况了,建议使用驼峰命名法,但是如果整个团队都使用中文拼音命名,也未尝不可…
另外就是类的属性,作者建议在变量前边加underscores (_)下划线,我觉得是个比较好的主意,这样可以清楚的区别变量和类的属性。
函数的命名方法差不多,建议使用驼峰命名法,比方:

public function getMapDataForAddress(address:AddressData):void;

类方法的话,如果你愿意也可以使用下划线来区别一般函数。
另外就是静态变量,也是驼峰命名法,全大写,多个单词用下划线分开,例如:

EVENT.COMPLETE
MouseEvent.MOUSE_MOVE

类和接口的命名,类自然是首字母大写,然后应该尽可能是名词,主要是用于描述类的用途。
接口的话,一般以I开头,表示这个是接口。
例子:

IExternalizable and IBitmapDrawable.

包的命名,推荐以域名后缀为第1文件夹,接着是域名,再是类包的项目名,再接着是类包的用途,再就是类名了,当然,如果你愿意,中途可以加一些子文件夹。

1803/090

Apache的域名配置和注意事项

唉,星期天有个人给公司提供了一个主机,接下来就是无尽的Apache配置了……
Win下的PHP环境推荐WAMP集成包,可以省去麻烦的PHP,Mysql配置。
接下来,是单IP绑定多域名的配置,对应配置文件是Apache的httpd.conf,找个地方加入如下代码即可,恩,建议加在最后边:

#不同端口自行设置~这行代码是必须的!Important!
NameVirtualHost *:80
<virtualhost *:80>
  #文件所在目录
  DocumentRoot &quot;D:/wwwroot/nwhy.org/&quot;
  #对应的域名
  ServerName nwhy.org
  #绑定的其他域名
  ServerAlias *.nwhy.org
  #DirectoryIndex 是默认主页的优先访问权,一般安装PHP环境后会被设置成index.php 不设置即使用默认值
  DirectoryIndex index.html
</virtualhost>
多个域名的话,同样配置即可。

另外,配置完DirectoryIndex index.html输入网址依然是优先访问index.php,不知何故,后来G了一下,发现是.htaccess文件搞的鬼,里边可以重写DirectoryIndex的值,如果碰到同样的情况,请检查目录下的.htaccess文件。

1703/090

Flash-一个另类的反破解方法

大家说说看,不使用加密工具,又要简单,又要不破坏源代码可读性,应该怎么反破解?
哈,我来介绍一个简单的方法,就是使用中文变量名(Flash8,Flash CS3和Flex都支持)……个人觉得这个做法挺无耻的……
而且看到类似var 我是变量:String="xxx";的代码,是不是心里怪怪的?
不过话又说回来,如果源文件是纯国内使用,其实也是一个不错的做法,中文变量比E文的直截了当的多,对吧。
下边放个Demo:


哈哈,然后是有趣的中文代码:

var 需要复制的mc个数:uint=7;
for (var i:uint=0; i<需要复制的mc个数; i++) {
	var 单个mc:mc=new mc();
	单个mc.x=i*75+20;
	单个mc.y=50;
	addChild (单个mc);
}

我使用SWFDecompiler4.4测试了一下,破解出来的文件库内元件是有的,但是代码却是空的,ASV5破解的情况也是如此,有兴趣的也可以下载了破解看一下。
怎么说呢这个,大概是因为反编译软件没有考虑读取中文编码的原因吧。

Page 1 of 3123