DFdou's Blog Life is short,Be yourself.

3108/080

Flash 子弹散射

恩,可以先看下Demo,点此查看Demo
这个东西原先是在Blueidea看到一个求助贴来的,修改了下。
下边是子弹散射类:

class BulletShot {
	private var i:Number = 0;
	public function BulletShot() {
	}
	public function shot(speedoffsetx:Number, speedoffsety:Number, offsetx:Number, offsety:Number, circletotal:Number) {
		/**
		   speedoffsetx    散射时x方向的速度偏移量;
		   speedoffsety    散射时y方向的速度偏移量;
		   offsetx         散射时x方向角度偏移量;
		   offsety         散射时y方向角度偏移量;
		   circletotal     一圆周内子弹总个数;
		*/
		i++;
		var _myBullet:MovieClip;
		_myBullet = _root.bullet_mc.attachMovie("c", "c"+i, i, {_x:275, _y:200});
		_myBullet.xspd = Math.cos(Math.PI*i/circletotal*offsetx);
		_myBullet.yspd = Math.sin(Math.PI*i/circletotal*offsety);
		_myBullet.onEnterFrame = function() {
			this._x += this.xspd*speedoffsetx;
			this._y += this.yspd*speedoffsety;
			if (this._x<0 || this._x>500 || this._y<0 || this._y>400) {
				delete this.onEnterFrame;
				removeMovieClip(this);
			}
		};
	}
}

本来想弄成完全面向对象,不过中间的bullet_mc跟attachMovie还真是不知道怎么OOP法……
在Flash里边的AS代码很简单,就不贴咯~
到时候拿来做游戏不错。。。

Tagged as: , No Comments
2808/081

有关Flash 8 Video Encoder无法启动的问题

由于虚拟主机不提供mp3文件下载,只能把mp3打包进flash里头。
结果打开Flash 8 Video Encoder却提示说:需要DirectShow9和QuickTime6.5以上支持。
于是就下载安装D9跟QT7,结果又提示说Flash 8 Video Encode.msi文件找不到!!
结果只要到处搜资料了,网上有这么一个教程~如下:
Flash 8 Video Encoder 在Flash 8的安装中有带,但运行需要DirectShow9和QuickTime6.5以上支持。实际上装DirectX9就可以了。
DirectX 最终用户运行时,下载地址:

http://www.microsoft.com/downloads/details.aspx?FamilyID=2da43d38-db71-4c1b-bc6a-9b6652cd92a3&displaylang=zh-cn

QuickTime v7.1.3下载地址:

http://www.crsky.com/soft/594.html

装完后运行指定Flash 8 Video Encoder.msi的安装路径,用以方法解决:
1.从控制面板增加删除程序项,运用FLASH8的更改 安装程序,点下一步,出现

2.此时不要关闭FLASH8安装程序,因Flash 8 Video Encoder安装会在此时释放,从开始菜单运行Flash 8 Video Encoder,就会自动找得到安装程序了。配置几分钟后。
Flash 8 Video Encoder就可以用了。
恩,的确实可以用了~

2808/080

目前几个开放平台/说不尽的SNS

由于目前没什么麻烦的事在忙,所以准备给自己找点活做,刚好在申请5d6d论坛的时候发现康盛创想在做Manyou(MYOP)的推广,正好了解了下。
目前国内大的开放平台有51.com,xiaonei.com,还有康盛的Myop。
而国外,google的open social,facebook,myspace等。
考虑了下,放弃国外的开放平台,恩……觉得一来中文文档资料比较少;
二来,google的open social么,google本身没有社区,要依靠第3方社区来加入open social,太被动。
facebook也是如此,似乎要求开发者使用他们自己定义的一套语法(PS:这点没去核实),另外facebook开放平台已经有段时间,现在应用已经有不少了,比较讨厌=。=
myspace,……看了下截面,感觉是翻版的facebook,直接放弃……
接着国内的,51.com,恩,51.com开放平台资料还算全,听说也是语言无关性,不过在官方只看到PHP跟Java的SDK。
另外……总觉得51.com做的不够漂亮……所以……放弃。
xiaonei.com,恩……又是facebook!地址:xiaonei.com开放平台
放弃,原因。。。既然是仿照,不如直接参加原创的开放平台。
剩下的是Myop,恩,跟上边的sns社区不一样的是康盛出名的地方不是他的sns社区,而是他生成的sns,discuz,supesite,ucenterhome,使用康盛产品的社区非常之多。
一来,个人觉得康盛的盈利模式比较独立,让我想起一个故事,在一个地方,很多人听说河对面有宝石,结果大家都往河对岸赶,而这时候有个人却做起了摆渡的生意。
十分多的人蜂拥到了对岸,却失望而归,而摆渡者却很明智的赚了一票。
康盛似乎是扮演了摆渡者的角色,恩,只能说是似乎吧~
呵呵,搞不好河对岸有黄金的传说,本身就是摆渡者的谎言。
言归正传,二来,看了下Myop的网站,文档跟资料都比较详细,而且列出了支持的语言及版本。
总的来说,给我的感觉是比国内其他开放平台要来的专业些,这可能是因为康盛多年发展的关系。
说起来Uchome也是facebook的翻版,恩,基本没区别~不过颜色搭配比xiaonei的好一些,灭嘿嘿嘿嘿嘿!
恩,先扯到这了,Ucenter跟Ucenterhome下载好也~开工了~
PS:早上查资料居然看到有人把Facebook翻译成脸谱!囧,非常囧!

2708/085

Flash 许愿板制作

flash 许愿板
先给Demo地址:Flash 许愿板
其实老早前就想把这个做好的……由于一些事情耽搁了~
有别于原来做的Flash留言板,这里使用了PHP输出XML来给Flash提供数据,而当时Flash留言板使用Loadandsend方法来做的~
恩,直接步入正题。
其实代码蛮简单的,主代码如下:

2608/080

2003Server下IIS需要用户名密码验证的问题

昨天在服务器上升级了下Discuz!在安装Ucenter的时候修改了网站的匿名访问用户名,结果。。。
每次登陆网站都会出现用户名密码验证,昨天下午弄了整个下午,完全没有头绪,网上说的增加Everyone和匿名用户啊,
设置匿名访问呢啊,删掉网站虚拟目录重新建立啊,都试过了,就差删掉IIS重建了……
今天早上Google的时候忽然发现个帖子,有点对头,说可能是网站匿名访问的用户名跟密码不对造成的。
想想昨天使用的用户名都没让输入密码,会不会是这个原因?
登录到服务器,把帐号密码换成远程登录的密码,哈,OK了~

Tagged as: No Comments
2308/081

Flash+Xml伪分页显示

原来以为Flash+Xml的分页很麻烦,今天看了下,发现实现方法其实蛮简单的,在Xml载入数据之后,把需要显示的数据显示出来就行了。
之所以说是伪分页,那是因为一开始就载入了所有的内容,只不过显示了特定节点间的内容而已。
点此查看效果
功能代码如下:

import mx.transitions.Tween;
import mx.transitions.easing.*;
//定义数组用于放置xml数据
var myarray:Array = [];
//加载xml
var myxml:XML = new XML();
myxml.ignoreWhite = true;
myxml.load("xmlpages.xml");
myxml.onLoad = function(s) {
	if (s) {
		//读取xml时执行函数
		initXml(myxml, myarray, 0, PAGE_NUM);
	} else {
		trace("cant connect xml");
	}
};
//定义总页数
var pages:Number;
//定义每页显示数目
var PAGE_NUM:Number = 15;
function initXml(xml, array, nstart, nend) {
	root = xml.firstChild;
	len = root.childNodes.length;
	if (nend>len) {
		nend = len;
	}
	//计算总的页数
	pages = Math.ceil(len/PAGE_NUM);
	//建立个容器放置加载的内容
	this.createEmptyMovieClip("main_mc", 1);
	main_mc.setMask(mask_mc);
	mask_mc._width = 150;
	mask_mc._height = 300;
	//建立个容器防止页数
	this.createEmptyMovieClip("page_mc", 2);
	//定义一个变量来设置y的位置
	var k = 0;
	for (var i = nstart; i0) {
		for (var j = 0; j<=pages; i++) {
		var button = page_mc["page_mc"+i];
		if (i != id) {
			button.gotoAndStop(1);
			button.enabled = 1;
		} else {
			button.gotoAndStop(2);
			button.enabled = 0;
		}
	}
}
Tagged as: , , 1 Comment
2008/080

Supesite 后台报错“参数错误,请指定正确的系统类型”解决办法

在弄Supesite首页数据输出的时候碰到的一个问题,后来“个人空间管理”里,点了“分类管理”中的几个分类,都报“参数错误,请指定正确的系统类型”的错!
Google了下,发现原来是“功能频道”设置里没有启用专题的关系。
启用该专题后,就没问题了……唉,这个提示也太离谱了,写“请先在功能频道里启用该专题!”不就好了?

Tagged as: No Comments
2008/081

Discuz!验证码总是错误

前天在服务器上把客户的Discuz!打包down了回来,在本地测试升级。
升完级发现注册部分的验证码不管怎么输都是显示验证码错误!但是网上的那份却是好的。
猜测是升级的问题,于是又从6.1弄回到6.0版本。结果发现还是错的……
在Discuz!官方论坛找了半天资料,差不多都是升级后才发生的此类问题,要不就是因为更改了config.inc.php文件导致的。
接着……也不知道是在哪个搜索引擎搜到的资料,说是因为不是通过原域名访问的原因。
于是又尝试用127.0.0.1访问……依然不行!
再之后,尝试着修改了一下$cookiedomain,改掉了里边原来的网站域名之后,验证码就正常了……
例:设置$cookiedomain=‘.127.0.0.1’~

Tagged as: , , 1 Comment
1408/081

Drupal常用API函数介绍 字符串截取函数truncate_utf8()

使用格式truncate_utf8($string, $len, $wordsafe = FALSE);
各参数介绍:
$string 想被截段的字符串。
$len 函数执行后返回字符串的长度上限。
$wordsafe 标志符。TRUE表示在最近的空格处截断并返回;FALSE则不。drupal的API参考指名默认FALSE。
返回值就是截取下来的字符串,在想用的地方打印即可。
不过用了感觉中文截取时的长度不太对,一个汉字是按照4个长度来算,而字符则是1个长度……
下边是函数体:

function truncate_utf8($string, $len, $wordsafe = FALSE) {
    $slen = strlen($string);
    if ($slen < = $len) {
          return $string;
    }
    if ($wordsafe) {
          while (($string[--$len] != ' ') && ($len > 0)) {};
    }
    if ((ord($string[$len]) < 0x80) || (ord($string[$len]) >= 0xC0)) {
          return substr($string, 0, $len);
    }
    while (ord($string[--$len]) < 0xC0) {};
        return substr($string, 0, $len);
}
608/080

Drupal 不使用View输出页面内容

View模块功能是很强大,可以完全不用写代码来达到输出指定的内容,但是呢,由View输出的页面代码会有无数多的DIV,如果对CSS不熟悉,但是页面设计的要求又很高的话,那简直就是噩梦。这里讲一下不使用View,而使用Drupal的API来输出内容的方法,一来呢,方便Design,二来,获得的数据自己也比较容易控制。
来段数据库操作代码:

< ?php
echo "标题";//标题
$result = pager_query("SELECT n.nid, n.title FROM {node} n WHERE n.type = 'story' ORDER BY n.created DESC", 15);//复杂的内容可能需要多表连接,db_query是不带分页参数的查询,pager_query则是带分页的查询
if (db_num_rows($result) > 0) {
while ($test = db_fetch_object($result)) {
    echo l($test->;title,'node/'.$test->;nid);
    };
}else {
echo "木有内容";
}
echo "<div>".theme('pager', NULL, 15)."</div>";
?>

下午在做的时候发现这块内容丢到Block里边的话……分页函数就会出问题……感觉有点莫名啊……
直接放在一个页面里就正常了,theme()函数难道在引用区块后无效?

608/080

Drupal模板页node.tpl.php/样式定制

node.tpl.php,恩,就是它了~node页内的参数主要由node自身的参数数量来决定。
看node具体参数可以使用< ?php print_r($node);?>来查看~
通常会看到类似下边的代码:

stdClass Object
(
    [nid] => 39
    [vid] => 39
    [type] => webform
    [status] => 1
    [created] => 1216881872
    [changed] => 1217937211
    [comment] => 0
    [promote] => 1
    [sticky] => 0
    [revision_timestamp] => 1217937211
    [title] => 用户调查表
    [body] => 网站调查
    [teaser] => 网站调查
    [log] =>
    [format] => 1
    [uid] => 1
    [name] => admin
    [picture] =>
    [data] => a:0:{}
    [webform] => Array
        (
            [nid] => 39
            [confirmation] => 感谢您的参与~
            [teaser] => 0
            [submit_text] =>
            [submit_limit] => -1
.............

接着参考其中的数组内容提取自己需要的内容就行咯,比如节点标题:

< ?php echo $node->title;?>

个人觉得node.tpl.php是所有模板文件里最容易定制样式的一个文件~

508/080

Drupal 模块webform介绍及建议

webform模块是用于意见反馈用的一个模块,具体设置相对来说比较简单,安装模块后看说明一步步设置要填写的字段即可。
最近一直做的工作中有用到用户信息反馈,用Drupal弄了老半天……
发现如果用webform自己生成的form,那么css方面的压力就很重。
如果页面代码完全由designer写的话,套用webform的办法却是有的。

< ?php
$form['submitted']['fluentin'] = array(
    '#type' => 'fieldset',
    '#prefix' => '<div id="vol-fluentin">',
    '#suffix' => '</div>',
    '#weight' => -1,
);
$form['submitted']['otherlang'] = array(
    '#type' => 'fieldset',
    '#prefix' => '<div id="vol-otherlang">',
    '#suffix' => '</div>',
    '#weight' => 0,
);
// Move the form field labeled "whatever" to the new fieldset
// $form['submitted']['newfieldset']['whatever'] = $form['submitted']['whatever'];
$form['submitted']['fluentin']['Fluent in'] = $form['submitted']['Fluent in'];
unset($form['submitted']['Fluent in']);
$form['submitted']['otherlang']['Please specify other languages'] = $form['submitted']['Please specify other languages'];
unset($form['submitted']['Please specify other languages']);
echo form_render($form);
?>

使用这个方法的话,就产生另一个问题。
只能把系统生成的东西包到html代码里……没得实质性的改变嘛!
所以……对于复杂的表单……个人希望别使用drupal,自己写html,操作数据库比较方便=。=