iLeichun

当前位置:首页

PHP常用字符串函数总结

分类:PHP  来源:网络  时间:2011-8-18 20:52:39

PHP语言中的字符串函数也是一个比较易懂的知识。今天我们就为大家总结了将近12种PHP字符串函数,希望对又需要的朋友有所帮助,增加读者朋友的PHP知识库。

 

 
1、查找字符位置函数

 

strpos($str,search,[int]):查找search在$str中的第一次位置从int开始;

stripos($str,search,[int]):函数返回字符串在另一个字符串中第一次出现的位置。该函数对大小写不敏感

strrpos($str,search,[int]):查找search在$str中的最后一次出现的位置从int

 

2、提取子字符函数(双字节)

submit($str,int start[,int length]):从$str中strat位置开始提取[length长度的字符串]。

strstr($str1,$str2):从$str1(第一个的位置)搜索$str2并从它开始截取到结束字符串;若没有则返回FALSE。

stristr() 功能同strstr,只是不区分大小写。

strrchr() 从最后一次搜索到的字符处返回;用处:取路径中文件名

3、替换字符串的PHP字符串函数

str_replace(search,replace,$str):从$str中查找search用replace来替换

str_irreplace(search,replace,$str):

strtr($str,search,replace):这个函数中replace不能为"";

substr_replace($Str,$rep,$start[,length])$str原始字符串,$rep替换后的新

字符串,$start起始位置,$length替换的长度,该项可选

4、字符长度

int strlen($str)

5、比较字符函数

int strcmp($str1,$str2):$str1&gt;=<$str2分别为正1,0,-1(字符串比较)

strcasecmp() 同上(不分大小写)

strnatcmp("4","14") 按自然排序比较字符串

strnatcasecmp() 同上,(区分大小写)

6、分割成数组的PHP字符串函数

str_split($str,len):把$str按len长度进行分割返回数组

split(search,$str[,int]):把$str按search字符进行分割返回数组int是分割几次,后面的将不分割

expload(search,$str[,int])

7、去除空格:

ltrim、rtrim、trim

8、加空格函数

chunk_split($str,2);向$str字符里面按2个字符就加入一个空格;

9、chr、ord--返回指定的字符或ascii

10、HTML代码有关函数

nl2br():使 转换为&lt;br>。

strip_tags($str[,¹<p>¹]):去除HTML和PHP标记

在$str中所有HTML和PHP代码将被去除,可选参数为html和PHP代码作用是将保留

可选参数所写的代码。

如:echo strip_tags($text, ¹<br><p>¹);

 

htmlspecialchars($str[,参数]):页面正常输出HTML代码参数是转换方式

11、字符大小写转换的PHP字符串函数

strtolower($str) 字符串转换为小写

strtoupper($str) 字符串转换为大写

ucfirst($str) 将函数的第一个字符转换为大写

ucwords($str) 将每个单词的首字母转换为大写

12、数据库相关的PHP字符串函数

addslashes($str):使str内单引号(¹)、双引号(")、反斜线()与 NUL

字符串转换为¹,",\。

magic_quotes_gpc = On 自动对 get post cookie的内容进行转义

get_magic_quotes_gpc()检测是否打开magic_quotes_gpc

stripslashes() 去除字符串中的反斜杠

 

文章来自:http://developer.51cto.com/art/200911/164634.htm
 

 

如何用AS3实现队列加载图片

分类:美文翻译  来源:网络  时间:2011-8-2 0:01:26
    本文将为您讲解如何使用AS3的Loader类来实现图片的队列加载,在本例中我们通过点击按钮来触发对下一张图片的加载操作,同时显示加载进度条。
    假设我们有4张图片:space1.jpg, space2.jpg, space3.jpg, space4.jpg. 并把这些图片存放在数组picsArray中。关键代码如下:
 
//定义点击按钮
var btnLoad:Button = new Button();
btnLoad.label = "点击我";
btnLoad.move(100, 20);
addChild(btnLoad);
 
//定义加载器
var loader:Loader =new Loader();
this.addChild(loader);
loader.x=65;
loader.y=70;
 
//这些图片必须放在同一个目录下,以保证能正常加载 
var picsArray:Array=["space1.jpg","space2.jpg","space3.jpg","space4.jpg"];
var numPics:int=picsArray.length;
var nextPic:int=0;
 
//添加加载完成侦听
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,doneLoad);
 
//加载出错侦听 
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,loadingError);
 
//加载进度侦听
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,updateInfo);
 
//按钮点击侦听
btnLoad.addEventListener(MouseEvent.CLICK,doLoad);
 
//加载第一张图片,初始化界面 
loadInitImg();
 
//触发加载
function doLoad(e:MouseEvent):void {
    loader.load(new URLRequest(picsArray[nextPic]));
    infoBox.visible=true;
    infoBox.text="开始加载...";
    //加载过程中禁用按钮
    btnLoad.mouseEnabled=false;
}
 
//更新加载进度信息
function updateInfo(e:ProgressEvent):void {
    infoBox.text="已加载: "+String(Math.floor(e.bytesLoaded/1024))+" / "+String(Math.floor(e.bytesTotal/1024))+" KB.";
}
 
//加载错误
function loadingError(e:IOErrorEvent):void {
    infoBox.text="加载图片出错,请刷新页面后重试!";
    loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,doneLoad);
    loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS,updateInfo);
    loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR,loadingError);
}
 
//加载完成一张图片,并准备下一张
function doneLoad(e:Event):void {
    infoBox.text="";
    infoBox.visible=false;
 
    //如果所加载的图片到达数组末尾,从0开始
    nextPic=(nextPic+1)%numPics;
    btnLoad.mouseEnabled=true;
}
 
//加载第一张图片初始化界面
function loadInitImg():void {
    loader.load(new URLRequest(picsArray[nextPic]));
    infoBox.visible=true;
    infoBox.text="Loading starts...";
    btnLoad.mouseEnabled=false;
}

良好的输出语句有利于代码调试

分类:美文翻译  来源:网络  时间:2011-7-31 1:39:50

    在程序设计中,良好的输出有利于代码调试。如果你的输出语句仅仅是为了输出相应的参数或变量以判断是否正确传值或确定变量的值,那么当输出语句较多时就不方便了。本文正是基于这个话题展开的,你将通过本文了解到在程序设计中要如何书写输出语句,以方便调试。本文以Java语句为例,通过代码进行相应的说明。

    一般情况的输出语句可能是:

    System.out.println("name =" + name);

    试想如果有10个类都有这个打印语句,那么在非调试状态下就不好区分是哪个类输出的了,为此改正如下:

    System.out.println("类Person:name =" + name);

    System.out.println("类Cat:name =" + name);

    System.out.println("类Dog:name =" + name);

    在看到输出信息的时候,你是不是发现很容易就知道是哪个类输出的了?

    根据这个规则,可以写得更详细些,例如上面的语句可以改写成下面的形式:

    System.out.println("类Person.addName:name =" + name);

    System.out.println("类Cat.checkName:name =" + name);

    System.out.println("类Dog.delete:name =" + name);

    这种写法把相应的函数名称也写进去了,看起来更直观。

 

ActionScript与js交互代码

分类:ActionScript  来源:网络  时间:2011-7-23 0:22:30
  1. package {   
  2.     import flash.display.Sprite;   
  3.     import flash.events.*;   
  4.     import flash.external.ExternalInterface;   
  5.     import flash.text.TextField;   
  6.     import flash.utils.Timer;   
  7.     import flash.text.TextFieldType;   
  8.     import flash.text.TextFieldAutoSize;   
  9.   
  10.     public class ExternalInterfaceExample extends Sprite {   
  11.         private var input:TextField;   
  12.         private var output:TextField;   
  13.         private var sendBtn:Sprite;   
  14.   
  15.         public function ExternalInterfaceExample() {   
  16.             input = new TextField();   
  17.             input.type = TextFieldType.INPUT;   
  18.             input.background = true;   
  19.             input.border = true;   
  20.             input.width = 350;   
  21.             input.height = 18;   
  22.             addChild(input);   
  23.   
  24.             sendBtn = new Sprite();   
  25.             sendBtn.mouseEnabled = true;   
  26.             sendBtn.x = input.width + 10;   
  27.             sendBtn.graphics.beginFill(0xCCCCCC);   
  28.             sendBtn.graphics.drawRoundRect(0080181010);   
  29.             sendBtn.graphics.endFill();   
  30.             sendBtn.addEventListener(MouseEvent.CLICK, clickHandler);   
  31.             addChild(sendBtn);   
  32.   
  33.             output = new TextField();   
  34.             output.y = 25;   
  35.             output.width = 450;   
  36.             output.height = 325;   
  37.             output.multiline = true;   
  38.             output.wordWrap = true;   
  39.             output.border = true;   
  40.             output.text = &quot;Initializing... &quot;;   
  41.             addChild(output);   
  42.   
  43.             if (ExternalInterface.available) {   
  44.                 try {   
  45.                     output.appendText(&quot;Adding callback... &quot;);   
  46.                     ExternalInterface.addCallback(&quot;sendToActionScript&quot;, receivedFromJavaScript);   
  47.                     if (checkJavaScriptReady()) {   
  48.                         output.appendText(&quot;JavaScript is ready. &quot;);   
  49.                     } else {   
  50.                         output.appendText(&quot;JavaScript is not ready, creating timer. &quot;);   
  51.                         var readyTimer:Timer = new Timer(1000);   
  52.                         readyTimer.addEventListener(TimerEvent.TIMER, timerHandler);   
  53.                         readyTimer.start();   
  54.                     }   
  55.                 } catch (error:SecurityError) {   
  56.                     output.appendText(&quot;A SecurityError occurred: &quot; + error.message + &quot; &quot;);   
  57.                 } catch (error:Error) {   
  58.                     output.appendText(&quot;An Error occurred: &quot; + error.message + &quot; &quot;);   
  59.                 }   
  60.             } else {   
  61.                 output.appendText(&quot;External interface is not available for this container.&quot;);   
  62.             }   
  63.         }   
  64.         private function receivedFromJavaScript(value:String):void {   
  65.             output.appendText(&quot;JavaScript says: &quot; + value + &quot; &quot;);   
  66.         }   
  67.         private function checkJavaScriptReady():Boolean {   
  68.             var isReady:Boolean = ExternalInterface.call(&quot;isReady&quot;);   
  69.             return isReady;   
  70.         }   
  71.         private function timerHandler(event:TimerEvent):void {   
  72.             output.appendText(&quot;Checking JavaScript status... &quot;);   
  73.             var isReady:Boolean = checkJavaScriptReady();   
  74.             if (isReady) {   
  75.                 output.appendText(&quot;JavaScript is ready. &quot;);   
  76.                 Timer(event.target).stop();   
  77.             }   
  78.         }   
  79.         private function clickHandler(event:MouseEvent):void {   
  80.             if (ExternalInterface.available) {   
  81.                 ExternalInterface.call(&quot;sendToJavaScript&quot;, input.text);   
  82.             }   
  83.         }   
  84.     }   
  85. }  

 

  1. <html lang="en">  
  2.  <head>  
  3.  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  4.  <title>ExternalInterfaceExample</title>  
  5.  <script language="JavaScript">  
  6.      var jsReady = false;   
  7.      function isReady() {   
  8.          return jsReady;   
  9.      }   
  10.      function pageInit() {   
  11.          jsReady = true;   
  12.          document.forms["form1"].output.value += " " + "JavaScript is ready. ";   
  13.      }   
  14.      function thisMovie(movieName) {   
  15.          if (navigator.appName.indexOf("Microsoft") != -1) {   
  16.              return window[movieName];   
  17.          } else {   
  18.              return document[movieName];   
  19.          }   
  20.      }   
  21.      function sendToActionScript(value) {   
  22.          thisMovie("ExternalInterfaceExample").sendToActionScript(value);   
  23.      }   
  24.      function sendToJavaScript(value) {   
  25.          document.forms["form1"].output.value += "ActionScript says: " + value + " ";   
  26.      }   
  27.  </script>  
  28.  </head>  
  29.  <body onload="pageInit();">  
  30.     
  31.      <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"  
  32.              id="ExternalInterfaceExample" width="500" height="375"  
  33.              codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">  
  34.          <param name="movie" value="ExternalInterfaceExample.swf" />  
  35.          <param name="quality" value="high" />  
  36.          <param name="bgcolor" value="#869ca7" />  
  37.          <param name="allowScriptAccess" value="sameDomain" />  
  38.          <embed src="ExternalInterfaceExample.swf" quality="high" bgcolor="#869ca7"  
  39.              width="500" height="375" name="ExternalInterfaceExample" align="middle"  
  40.              play="true" loop="false" quality="high" allowScriptAccess="sameDomain"  
  41.              type="application/x-shockwave-flash"  
  42.              pluginspage="http://www.macromedia.com/go/getflashplayer">  
  43.          </embed>  
  44.      </object>  
  45.     
  46.      <form name="form1" onsubmit="return false;">  
  47.          <input type="text" name="input" value="" />  
  48.          <input type="button" value="Send" onclick="sendToActionScript(this.form.input.value);" /><br />  
  49.          <textarea cols="60" rows="20" name="output" readonly="true">Initializing...</textarea>  
  50.      </form>  
  51.     
  52.  </body>  
  53.  </html>  

有关as3的一些总结

分类:ActionScript  来源:网络  时间:2011-7-22 21:38:02

1.载入外部xml方法
注意点:如果将flash放在html中,as中xml的路径都是相对html的路径
2.鼠标跟随事件
注意点:用stage.addEventListener(MouseEvent.MOUSE_MOVE, FollowMe2);// FollowMe2跟随事件方法名,FollowMe2方法中必须加上event.updateAfterEvent();
这样鼠标可以更流畅
3.动态文本遮罩
注意点:如果动态文本无法正常显示设置过滤器
var txt_blur:BlurFilter = new BlurFilter(0, 0, 0);
intro.filters=[txt_blur];
设置动态遮罩:contentMc.mask=maskMC;
4.跳帧时无法读取帧里的元件
注意点:flash的跳帧延时问题,可以用Event.ENTER_FRAME事件监听是否读取到元件,读取到后移除监听(不知道是否有更好办法)
5.关于监听带参
通常设置一个事件都是
元件.addEventListener(事件名,事件处理方法);
在这里无法将这个事件的一些设置参数传进处理方法中
在这里分享一个工具类EventDpMediator.as

package CYPL.utils {
import flash.events.Event;
import flash.events.IEventDispatcher;
import flash.utils.Dictionary;
public class EventDpMediator {
  private static var eventObj : Object;
 
  private var  _dispatcher : IEventDispatcher;
  /**
   * @dispatcher 目标对象
   */
  public function EventDpMediator(dispatcher : IEventDispatcher) {
   _dispatcher = dispatcher;
   eventObj = {};
  }
  /**
   * 注册事件
   * @eventType 事件类型
   * @handler 响应方法
   * @arg 参数对象
   */
  public function addEventListener(eventType : String,handler : Function,arg : Object = null) : void {
   //trace("addEventListener:::", eventType)
   removeEventListener(eventType, handler);
   if(eventObj[eventType] == undefined) {
    eventObj[eventType] = new Dictionary;
    eventObj[eventType]["count"] = 0;
   }
   eventObj[eventType]["count"]++;
   _dispatcher.addEventListener(eventType, eventObj[eventType][handler] = handlerX.call(null, handler, arg));
  }
  /**
   * 删除事件
   * @eventType 事件类型
   * @handler 响应方法
   */
  public function removeEventListener(eventType : String,handler : Function) : void {
   if(!eventObj[eventType])return;
   var __handler : Function = eventObj[eventType][handler];
   if(__handler == null)return;
   //trace("removeEventListener", eventType);
   _dispatcher.removeEventListener(eventType, __handler);
   delete eventObj[eventType][handler];
   if(eventObj[eventType]["count"]-- == 0) {
    delete eventObj[eventType]["count"];
    delete eventObj[eventType];
   }
  }
  private function handlerX(handler : Function,arg : Object) : Function {
   var This : EventDpMediator = this;
   return function(e : Event): void {
    handler.call(null, This, e, arg);
   };
  }
}
}
使用例子:
/**
* @author:CYPL
* @用途:EventDispatcher的中介类,方便进行传递参数
* @date:2009.7.14
* @example: 
*/
import CYPL.utils.EventDpMediator;
var ms=new EventDpMediator(stage);
ms.addEventListener(MouseEvent.MOUSE_DOWN,handler,{o:3});
ms.addEventListener(MouseEvent.MOUSE_UP,handler,4);
ms.addEventListener(MouseEvent.CLICK,handler);
//参数m:中介对象,e:事件对象,arg参数对象
function handler(m:EventDpMediator,e:Event,arg:*=null) {
switch (e.type) {
case MouseEvent.MOUSE_DOWN :
trace("MouseEvent.MOUSE_DOWN:",arg.o);
break;
case MouseEvent.MOUSE_UP :
trace("MouseEvent.MOUSE_UP",arg);
break;
case MouseEvent.CLICK :
trace("MouseEvent.CLICK:",arg);
break;
}
//handler内部可以通过第一个参数中介对象来remove
m.removeEventListener(MouseEvent.MOUSE_DOWN,handler);
}
//外部可以直接用中介对象来remove
ms.removeEventListener(MouseEvent.MOUSE_UP,handler);

[转]最好玩的十大单机游戏排行榜

分类:游戏策略  来源:网络  时间:2011-6-29 21:34:55

1:仙剑奇侠传

        中国大陆风靡一时的游戏,后又被改编成了电视剧。历史的原因带给了我们太多的遗憾,所以我们已经无法用图片说明当年的盛况了。我们只能用文字来完成我们对武侠一代的缅怀。依稀记得:哀伤的音乐伴随李逍遥最后孤独的背影不知道让多少仙剑迷们泪流满面;为了一个传说可以让月如不死的结局,多少人在电脑前执着的做着那些程序根本不承认的傻事……那时,玩家们不是在玩一个游戏,而是在圆自己的一个梦。时过境迁,真正留在我们内心当中的是永远不变的仙剑奇侠传。

2:星际争霸

        你知道经典两个字怎么写吗?如果不知道,那我来告诉你吧!“经典”是这样写的:星际争霸!它至今仍然是最为经典的游戏,别跟大家说什么红色警报,红色警报已经堕落了,在那个坦克大战的年代,终于有了一部靠着诸兵种配合的游戏,还需要我说经典的理由吗?至于现在的职业联赛排名来看,暴雪公司对该游戏的改动实在太大,但是总体说来,一个接近十年的游戏依然畅销,一个仍然能够在WCG上面屹立不动的游戏,这些足以说明星级争霸就是经典了。再说一次,经典是这样写的:星际争霸。

3:红色警戒

        睡觉说梦话都是满嘴的“YES,SIR!”,满脑袋都是坦克、重坦、萨姆车等等吧,反正一睡觉就是这些东西。别跟我说它不是九十年代的经典游戏,九十年代能在网吧当中所有机器都有的游戏,请问是什么呢?这难道不是一个经典的游戏应该具备的素质吗?

4:三国志

        光荣公司的大作,发扬了日本PC游戏厂商一贯的强项就是,战棋类游戏。光荣历来可以将战棋类游戏的特点以及优点发挥的淋漓尽致,从三国志I一直到三国志XI,几乎是只有进步,没有退步。当年经常为了得到一个武将,大动干戈,掀起很多战争。尤其是三国志八,它的想象以及制度几乎到了完善的地步。在那个游戏的平台还不是很完善的年代,终于有了一款游戏,可以勾起美好的梦想,做英雄的梦想。终于有一天,我可以和赵云、吕布等人一起作战,我们为他们安排,我们让他们团结。

5:大富翁

        消失了很多年之后的强手棋显身在这个经典的游戏上,至于为什么当年会有那么多人玩这个款游戏,那你应该看看为什么当年那么多人玩强手棋这种棋类游戏。曾经有人一直认为强手棋是一个赌博类游戏,反正天天就是看不惯我们玩的东西。不过,看不惯是他的问题,我们玩我们自己的,从来没有觉得强手棋跟赌博有什么关系,多年以后大富翁的诞生,让已经消失的强手棋再次回到了我们的身边。有一天强手棋不再回来的时候,有一天我们已经淡忘了那个强手棋的时候,我们难道连大富翁也淡忘了吗?

6:三国志英杰传

        又是一款光荣公司的作品,不需要说明什么了,做为一个资深玩家,如果连三国志英杰传都没有玩过,真是妄称了资深玩家这个称号了。但是需要说明的是,在九十年代的时候三国志英杰传在网吧并没有特别的体现出来,因为三国志系列始终压制着它的发展以及市场。当然这并不是它不能成为经典的理由。它的理由就是,经典还需要理由吗?

7:帝国时代

        还记得当年红色警报走向末路的时候,帝国时代异军突起,接替了整个网吧的游戏,当年做为一个真正的网吧最应该有的三款游戏是:红色警报,帝国时代,星际争霸。如果你少了这当中任何一款游戏,那你还叫网吧么?遗憾的是这款游戏最终还是没有进入WCG的比赛。有一点做为中国的玩家不应该忘记的时候,当我们阅读各种帝国历史的时候,当我们阅读各种战争史的时候,我们有没有想到,其实帝国时代已经告诉我们了,做为一个帝国应该具备的素质,做为一个伟大的国家,应该有的一切。

8:FIFA

        世界杯始终是中国人的一个最大的遗憾,还好FIFA系列帮助我们把这个心结彻底解去。很久以前,经常在FIFA98(Road To World Cup)里带着中国队冲进世界杯决赛圈,然后拿了冠军,对大家说,中国队又拿冠军了。至于用别的国家队虽然夺取冠军显得比较容易,但是实际上带着中国队拿冠军还是一个最大的成就感。很久以前有一个笑话说,有人问佛祖:日本队什么时候能拿冠军?佛祖说:100年。那个人又问:韩国队什么时候能拿世界杯冠军?佛祖说:50年。那个人接着问:中国队什么时候能拿冠军?佛祖哭了……。我现在想说:佛祖,你不用哭了,中国队天天都拿冠军。

9:英雄无敌

        根据欧美神话改编的游戏,其实在中国一般都不会非常畅销,尤其又是一个相对比较复杂的游戏。但是英雄无敌是少数的几个能够改变这种局面的游戏。当年网吧风起云涌,要按照当年的盛况来说,英雄无敌绝对可以排到这个位置,只要是当年天天耗在网吧的人,都应该知道它的火爆程度了。

10:大航海时代

        这是一款在PC游戏上市之前就已经火得一塌糊涂的游戏,这是一款无与伦比的冒险类游戏,它没有残杀,没有可怕的野兽,也没有令人心惊胆战的血腥。它所有的东西,都在于智慧和冒险的精神。如果你没有玩过大航海,那么你就永远不要对别人说自己是个资深的玩家。大航海在当年的网吧当中绝对不是一款最火爆的游戏,但是今天当它站在这个名单上面,就已经说明它的份量。我有一个梦想就是周游全世界,我还有一个梦想就是做一个冒险家。
 

[转]《魔兽世界》战斗类型与策略

分类:游戏策略  来源:网络  时间:2011-6-29 21:12:45

  和大多数大型多人在线角色扮演游戏[MMORPG]一样,魔兽世界是一个以战斗为基础的游戏。当然你也可以做很多其他的事情(比如制作工艺品和完成任务),但你肯定会在PvE杀怪上花很多时间。下面这个简明指南就是用来帮你决定你将扮演哪种角色以及如何选择操纵这个角色的策略。(如果你不能理解下面的某些词语,请参阅我们的术语页面)

  -=战斗类型=-

  (请注意玩家并不需要局限于某种类型上。)

  近身格斗系[Melee]

  近身格斗系的战士倚仗武器和盔甲来击败对手,他们的生命值和防御值比较高,同时也拥有战斗技能和Buff技能。这些战士承受了敌人的大部分攻击伤害,通常被称为“坦克[Tank]”。大多数的近身格斗武器(比如剑,钉头锤和斧头等)都差不多,所以在更多的资料被披露出来之前我们不准备在武器的比较上浪费口舌。以下是近身格斗的类别。

  >双手武器型[2-Handed Weapon]

  许多战士使用双手武器(比如剑,战锤和战斧等),尽管它们的速度比同类型的单手武器来的慢,但它们可以造成更大的伤害。而且由于盔甲可以降低伤害值,攻击力越高,则实际造成的伤害值在攻击值上占到的比重也越高。某些高级双手武器还会有优秀的魔法属性加成[bonus]。

  优点:高攻击力,魔法属性加成,加速战斗进程。

  缺点:攻击速度慢,不能使用盾牌,缺少保护。

  >单手武器和盾牌型[1-Handed Weapon & Shield]

  近身格斗系战士的另一种常见配置就是单手武器加盾牌。这种类型的好处是比较全面,因为它平衡了进攻(武器)和防守(盾牌)。尽管你的攻击力没那么高,但同时你承受的伤害也比较小,这样你就能在战场上坚持更久,不太容易死掉。

  优点:可以用盾牌格挡,防御值提高,攻击速度快,危险性降低。

  缺点:战斗时间变长,低攻击力。

  >双武器型[Dual Wield]

  这是近身格斗系战士的最后一种配置,只限于猎人和盗贼职业。双武器使得你能造成双倍于单手武器和盾牌型战士所能造成的伤害,随着等级的提高你还能学习格挡技能(就像暗黑破坏神II中的刺客)。当然你也将承受和双手武器型战士相同的伤害。

  优点:双倍于单手武器和盾牌型战士的伤害,高级别角色可以格挡,两件武器。

  缺点:只限于两种职业,在等级未达到前不能格挡。

  总体优势:高生命值和防御值,容易操作,可以单练[solo]。

  总体劣势:承受最高的伤害,容易挂,很难避开某个敌人,很难打倒大群怪物,和远程攻击怪物作战时处下风,魔法能力低。

  远程攻击系[Ranged]

  远程攻击系的战士擅长从远处发起攻击。从设定上来说,远程攻击系比近身格斗系造成的伤害要小,因为他们有一定的攻击距离,同时远程攻击在命中后也能被中止。他们通常穿轻甲,生命值不高,移动迅速,有一定的魔法能力。所有的远程武器都需要弹药(放在你的行囊中)。值得庆幸的是,某些交易技能[Tradeskill]能让你在野外制作弹药,这样当你弹尽粮绝的时候就不用跑回城去了。某些高等级的武器可以发射魔法子弹,那样就不需要弹药补给了。大多数的远程攻击系战士都备有一把近身武器,以抵御近身怪物的攻击。以下是远程攻击系的类别:

  >使用火枪型[Gun User]

  矮人(还可能有侏儒)是唯一擅长使用这些机械武器的种族,但是其他种族也可以学习使用火枪。火枪的攻击速度和杀伤力各异,但它们基本上攻击速度缓慢,而且威力巨大。目前已知的火枪都是双手使用的,但也可能会有单手使用的手枪。

  优点:杀伤力大,加速战斗进程,有机会在敌人接近你之前杀死他。

  缺点:攻击速度较慢,会吸引仇恨[Agro](因为造成的伤害高)。

  >使用弓[Bow]型

  远程攻击系多数使用弓作武器。弓射速最高而且最精准,但是和其他类型相比杀伤力就比较小。

  优点:攻击速度较高。

  缺点:威力较小,在怪物靠近你之前很难杀掉它们。

  >使用弩[Crossbow]型

  弩在杀伤力和攻击速度方面和火枪类似,射速低但威力大。和火枪不同的是,所有的种族都可以使用弩。

  优点:杀伤力大,加速战斗进程,有机会在敌人接近你之前杀死他。

  缺点:攻击速度较慢,会吸引仇恨(因为造成的伤害高)。

  总体优势:可以在一定距离外发起攻击而免受伤害,低风险,可以拉怪[Pull Mob],适合与远程攻击系怪物作战,魔法能力较高。

  总体劣势:生命值低,杀伤力较小,不容易单练。

  施法者[Spellcaster]

  施法者使用魔法来打倒怪物,他们拥有最高的魔法值和最低的生命值。他们可以使用各种类型的魔法,从直接伤害型、辅助型(buff)到群体控制型,比如定身术[Rooting]和催眠术[Sleeping]等。施法者通常无法穿盔甲,而只能穿一般的衣服(比如长袍[Robe]),所以他们的防御值很低。施法者还常带一把近战用的手杖[Staff](速度慢但威力较大的近身攻击)和一把法杖[Wand](威力不大的远程攻击)。以下是各种魔法元素的类型:

  >神圣系[Holy]

  神圣系魔法使用光的力量,是圣骑士的不二选择。神圣系的施法者拥有强大的治疗力量和光环能力。他们可以对不死系造成额外的伤害。

  优点:治疗力量,对不死系的额外伤害。

  缺点:一些怪物对神圣魔法免疫,杀伤力不高。

  >火系[Fire]

  火系魔法是所有元素魔法中杀伤力最高的,高等级角色拥有能杀伤多个目标的魔法。

  优点:最高的杀伤力,高等级时能杀伤多个目标。

  缺点:辅助型魔法不多。

  >自然系[Nature]

  德鲁依使用自然系的元素魔法,因为他们最接近自然。自然系有很多辅助型魔法,比如树根纠缠[Entangling Roots],它可以将敌人束缚一段时间。该系也有治疗魔法。

  优点:许多支援型魔法,有治疗魔法。

  缺点:直接伤害型魔法不多。

  >冰系[Cold]

  冰系魔法拥有将敌人的移动速度减慢的特殊能力,这点在集体战斗中十分有用。该系也有很多辅助型魔法,比如束缚和护盾的魔法。相应的,冰系的杀伤力就比其他魔法,比如火系,来的小。

  优点:支援型魔法,减速效果。

  缺点:杀伤力小。

  >暗系[Shadow]

  暗系魔法使用黑暗的力量,也是术士使用的魔法。该系有些独特的魔法,比如偷取生命[Life Stealing]和偷取魔法[Mana Stealing]。

  优点:可以偷取生命。

  缺点:和神圣系战斗时处下风。

  总体优势:可以在一定距离外发起攻击而免受伤害,可以拉怪,有许多攻击型和辅助型魔法,有单练的可能(xxiner:意即希望渺茫)。

  总体劣势:生命值、防御值低,很多怪物对特定的魔法系免疫。

  宠物和召唤兽操纵型[Pets & Summons]

  好几种职业(像猎人和术士)可以操纵宠物,或者用魔法召唤生物。通常来说召唤兽比宠物强,但是它们只能存在一定的时间,而宠物不会消失。宠物还可以和主人一起成长,它们会变得越来越强。以下是和宠物或召唤兽配合使用上述的某种战斗类型时的策略。

  (以下把宠物和召唤兽通称为“宠物”)

  >近身格斗型

  近身格斗型角色一般将宠物当作进攻时的辅助力量。你想逃跑的时候,宠物还可以帮你争取时间。它们会对敌人造成重大伤害,但它们不一定有较高的生命值。

  >远程攻击型

  远程攻击型角色把宠物当成自己的肉盾,这样自己就可以安全地从远处进行攻击。这种宠物不一定有很强的攻击力,但是肯定要有较高的生命值。

  >施法型

  和远程攻击型一样,施法型角色把宠物当成自己的肉盾,而自己安全地在远处进行攻击。这种宠物不一定有很强的攻击力,但是肯定要有较高的生命值。

  单练策略

  魔兽世界并不要求玩家一直组队进行游戏。事实上,大多数玩家将会花费不少时间独自游戏。

  >一对一

  玩家应该能轻松单挑和自己等级相同的怪物,要不然他们就需要升级自己的武器了。当你和怪物一对一时,记住一点:千万别引来其它怪物。

  >一对多

  和一大群怪物为敌的结果一般是你的死亡,所以除非你的等级高出它们一大截,千万别做这样的事情。如果你不幸撞见两三个怪物的话,在和其它怪物战斗的时候,确保用魔法让最强的怪物失去能力。同样,按由弱到强的顺序,首先杀掉最弱的怪物。较少的怪物造成较高的伤害比起较多的怪物造成较少的伤害要好,因为你可以让其中的怪物失去能力,同时也不被打扰。

  >单打终级怪物

  和终级怪物作战时,确认你已经把附近区域内的跟班们都清理干净了,你和它的战斗将是一对一的。另外保证你的生命值、魔法值、愤怒值[Rage]全满,能加的buff都加上。如果这个终级怪物比你的等级高出很多,不要抱获胜的希望,你肯定会死的。战斗过程中,一直使用你最强的攻击方式。如果你会治疗魔法,把你的魔力节省下来,以在治疗时使用。

  组队作战策略

  魔兽世界中的队伍最多为五人,以便于管理。一支队伍能比单人打倒更强的怪物。游戏中有一些区域的怪物十分强大,你只有和伙伴组成队伍才能在那种地方生存。在队伍中切记保持自己和其他队员身上的buff。

  >多对一

  当一支队伍和单个怪物作战时,你通常希望怪物只攻击坦克(队伍中生命值和防御值最高的队员)。确保及时补充坦克(们)的生命值。当你快要死的时候记得退后,你的同伴会帮你挡住怪物。

  (IMG:http://wow.warcry.com/content/combat/images/boss_multi.jpg)

  >多对多

  和一群怪物作战时,最重要的一点是在队伍中保持沟通。每个人都需要“集中火力”于同一个怪物,这样就可以将它们逐一打倒。采取和一对多时同样的策略:让最强的怪物丧失能力,先打倒最弱的怪物。

  >组队打终级怪物

  组队打终级怪物时,确保每个人的buff和生命值都是满的。同时确保所在区域内的跟班都已被清除。战斗时采取和多对一时相同的策略,除非这个怪物实在很强。如果是那样的话,就让队伍中的坦克去攻击怪物,其他人则负责不断地治疗坦克。

  >战利品获取[Looting]

  魔兽世界中有三种获取战利品的方式:

  自由制[Free-for-All]:队伍中的任何人都能拿战利品。适合于快速解决怪物的场合,或者被打倒的怪物只掉落某几个队伍成员才需要的物品。

  循环制[Round Robin]:队伍中的每个成员都能轮到一次机会来获取战利品。适合于每个人都想获得物品的场合(即使那些物品只是些垃圾)。

  队长制[Master Looting]:只有队长可以获取战利品并由其分配。适合于组队打boss级怪物的场合。

  其它策略

  以下是一些使用于魔兽世界中的特定战斗场合的策略。

  >对付群居性怪物[Social Mob]

  魔兽世界中的某些怪物会帮助附近挨打的同伴。如果你没带上宠物,单打这种怪物几乎没有胜算。所以在你的等级还未远高于它们时,别去惹那些怪物。如果你有宠物或者身处队伍中,让你的宠物或队伍中的坦克去抵挡怪物的进攻,并采用像对付其它大群怪物一样的策略。

  >拉怪[Pull]

  当和非群居性怪物作战,你可以使用远程攻击或魔法将单个怪物“拖”出怪物群体中。这样你可以在其它怪物的愤怒范围[Aggro Range]之外将单个怪物吸引过来。你可以使用这种方法将一群怪物逐一打倒。

  >怪物再生[Respawning]

  如果你正在等待怪物的刷新(比如需要完成某个杀掉X怪物的任务),最好是在周围区域绕着走。这样你就能观察到怪物的刷新时间和地点,同时也能看到其它情况,比如附近是不是有其他玩家,他们的位置在哪里。当心别靠近怪物群的刷新点,它们有可能就刷新在你的头顶(也包括所有的仇恨值)。


 

[转]程序员应改正的七大坏毛病

分类:编程开发  来源:网络  时间:2011-6-21 22:24:41

1.- 所有的程序都写的很烂,除了我的。

说实话,要告诉你一个坏消息,所有的程序都写的很烂,也包括你的。无论你在上面花多少功夫,其他大多数程序员总是会认为你写的代码很烂、他们能写出比你好10倍的程序。

如何纠正: 不要挑剔别人的程序,或许有一天也许你的程序会被人放在聚光灯下挑剔。要保持客观和专业的评论,不要轻易判断。要谦虚,从周围人哪里学习经验,提醒自己不要写出这样的程序。

2.- 这就几秒钟的事,不用走变更流程了。

每个人都想走捷径,捷径充满诱惑。有时候走捷径是必要的,但总的来说,走捷径是危险的,应该避免。走捷径也许会节省你数小时的时间,但如果走错了,就可能会给你带来数月的麻烦。

如何纠正: 遇到需要慎重处理的事情时不要太过自信。让其他人来复查你的所作所为。如果你计划要走捷径,请确保让你的负责人知道这样做的理由以及其中的风险。每次在走捷径时最好都让你的经理来确认实施成功。

3.- 这是个几分钟就能搞定的事。

在我的家乡Barcelona,那里的圣家族大教堂让我非常的自豪,它的举世闻名来自于它的美丽,也来自于它的建筑完工日期的规划(它动工于1882年,目前仍未完工),但这可能是因为他们没有让一个程序员去估计这个完工时间,否则的话,估计出的完工所需的时间很可能2周。

如何纠正: 从一开始,你就必须严肃的认识到,对于一个有一定规模的软件开发过程来说,进行精确的时间评估是不现实的,我们能做的只是猜测。同样要记住的非常相似一点是,我们通常会发现有很多事情根本不能预见到它们会花去数倍于我们初始估计的时间,我通常的做法是把估计的时间乘上1.5或2。

4.- 唯我独尊。

斗鸡

很多程序员参与的讨论会基本上看起来就像是一场斗鸡,而不像是人类的讨论,这通常会出现在关于设计和架构问题的讨论会上。你基本上很容易看出其中各自都怀有顺我者昌逆我者亡的心态,你基本上可以把大多数的争论者所说的话直接换成咕咕!咕咕嘎!咕咕咕咕咕咕!咕咕嘎!

如何纠正: 把你的自负留在心底。太过自负是所有程序员身上的一个非技术性的最大的一个毛病。凡事要三思而行啊。

5.- 这不是我的错。

在我看来,这另外一个大多数程序员都会有的坏毛病是缺乏责任心。我们总在找借口… 就比如有人会说,如果在正常情况下,这个错误绝对不会出现,但说老实话,这很难让人信服。

如何纠正: 犯了错误不需要去捶胸顿足,也不需要用刨腹自杀来谢罪,要勇于承担。我们应该怀有一种健康的态度,说出这样的话:“呀,抱歉,我现在就去改正这个错误,是我的错”,这是一种很敬业的态度,这能帮助我们树立一个好的声誉,更好的得到你同事的尊重。

6.- 没有激情。

重复的和简单的任务通常不会带来什么动力,但这些事必须要完成,当程序员被要求去完成这些事情时,通常会显得无精打采,没有效率。

如何纠正: 要提高自信。

7.- 不成熟

你根本就没有潜心投入,干到一半就结束了,然后倒头便睡。我发现大多数程序员对“干完”这个词很纠结。请记住,干完意味着:测试过(不仅仅只是单元测试),文档完整,提交过,合并过…

如何纠正: 这是一个很严重的问题,相对于完全的完成某些功能性问题而言,这些并不是显得很有必要的任务会很庞杂和难处理,通常需要你有纪律性和受过培训。也许,这最简单的能让一个程序员理解他的开发是否真正的完成的两个办法就是:相互复查和演示。

蚊子的相关摘录,献给易被蚊子叮咬的人

分类:个人日志  来源:网络  时间:2011-6-10 22:43:39

    蚊子,属于昆虫纲 双翅目 蚊科,全球约有3000种。是一种具有刺吸式口器的纤小飞虫。通常雌性以血液作为食物,而雄性则吸食植物的汁液。吸血的雌蚊是登革热、疟疾、黄热病、丝虫病、日本脑炎等其他病原体的中间寄主。
 蚊子属四害之一。其平均寿命不长,雌性为3-100天,雄性为10-20天。
    蚊子无法张口,所以不会在皮肤上咬一口,它其实是用6枝针状的构造刺进人的皮肤,这些短针就是蚊子摄食用口器的中心。这些短针吸人血液的功用就像抽血用的针一样;蚊子还会放出含有抗凝血剂的唾液来防止血液凝结,这样它就能够安稳地饱餐—顿。当蚊子吃饱喝足、飘然离去时,留下的就是一个痒痒的肿包。但是,痒的感觉并不是因为短针刺人或唾液里的化学物质而引起的。我们会觉得痒,是因为体内的免疫系统在这时会释出一种称为组织胺的蛋白质,用以对抗外来物质,而这个免疫反应引发了叮咬部位的过敏反应。
    雌雄蚊的食性本不相同,雄蚊“吃素”,专以植物的花蜜和果子、茎、叶里的液汁为食。雌蚊偶尔也尝尝植物的液汁,然而,一旦婚配以后,非吸血不可。因为它只有在吸血后,才能使卵巢发育。所以,叮人吸血的只是雌蚊。
    蚊子爱叮哪些人?蚊子的头上和腿上长着触角和刚毛,有感觉作用,对湿度、温度、汗液都很敏感,所以它们常爱叮爱出汗又不洗澡的人。儿童的皮肤娇嫩,新陈代谢活泼,皮肤上的毛孔挥发汗液快,常挨蚊子叮。还有,蚊子对弱光很喜欢,如果你穿上一件黑色的衣服,正好合适于蚊子的视觉习惯。但是,蚊子对强气流很敏感,夏天当你摇扇乘凉时,蚊子难以接近你。
 蚊子咬人的速度与温度有很大的关系,在摄氏37度以上时,它可以做到在0.1秒就将人叮咬“上口”,在摄氏27度以下时叮人的速度就大大降低,摄氏17度以下一般不再咬人。
    雌蚊首先叮咬体温较高、爱出汗的人。因为体温高、爱出汗的人身上分泌出的气味中含有较多的氨基酸、乳酸和氨类化合物,极易引诱蚊子。
    雌雄交配大多在清晨或傍晚,先是雄蚊围绕矮树顶,屋檐、窗口或空旷处成群结队地飞,雌蚊看准机会加入队伍,在飞行中很快进行交配。
    美国宾夕法尼亚州一名57岁的妇女因为打死了一只蚊子,造成肌肉受到小孢子虫属真菌感染而死亡。研究人员推测,这名妇女是把蚊子拍死在了皮肤上,被打烂的蚊子尸体残骸进入皮肤,造成感染。有专家分析,蚊子吸血时会在皮肤上留下一个伤口,当它正在吸血时,如果突然被人拍死,蚊子的口器来不及拔出,那么人皮肤上的伤口就不会愈合。而蚊子身上所携带的致命真菌,可能就会随着还没来得及愈合的伤口,侵入体内引起细菌感染,最终导致死亡。当然,如果人身上本来就有伤口,感染了被拍死的蚊子携带的真菌后,也会很危险。 在《新英格兰医学杂志》上写拍死蚊子会致人死亡的文章作者之一、纽约阿尔伯特·爱因斯坦医学院的科伊尔严肃地提了一个看似搞笑的建议:“如果蚊子正在咬人,最好轻轻将它弹走,而不是一巴掌打死。”
    蚊子喜欢叮咬哪些人:
    1:出汗多。汗液中含有大量氨基酸、乳酸及氨类化合物,蚊子对此非常敏感,一旦嗅到这些物质的气味就食欲大开。   
    2:O型血。话说O型血有些甜味,蚊子一旦尝到了甜头便会集群而来,穷追猛打。   
    3:皮肤嫩。皮肤太好,轻轻一刺就能享受到美味,蚊子也想多做这种不费力的好事儿。   
    4、奶味。宝宝容易成为蚊子进攻的对象,一是宝宝没有挡驾的能力,对于蚊子来说,危险性不大。第二:宝宝身上有又香又浓的奶味,蚊子是闻香而来。   
    5、喘气粗。肺活量大的人呼吸自然深长,呼出的二氧化碳较多,蚊子嗅到后群集而来。
    6、蚊子更喜欢叮咬女人,最近一个研究表明:大多数化妆品中都含有硬脂酸,而蚊子则非常喜欢这种脂肪酸,所以女人更受蚊子“欢迎”。
    7、穿深色斜纹牛仔裤易挨咬。蚊子怕光但又不喜欢光线太暗,最喜欢在弱光环境下吸血。白天,当人们穿着深色衣服时,反射的光线较暗,恰恰投其所好。
    8、蚊子爱肤色黑或发红的人。
    蚊虫叮咬后止痒小妙招:
    1、用切成片的大蒜。在被蚊虫叮咬处反复擦一分钟,有明显的止痛去痒消炎作用,即使被咬处已成大包或发炎溃烂,均可用大蒜擦,一般12时后即可消炎去肿,溃烂的伤口24小时后可痊愈。皮肤过敏者应慎用。   
    2、用西瓜皮反复擦拭蚊虫叮咬处,即可止痒。   
    3、取少量藿香正气水,涂抹于被叮咬处,半小时左右,瘙痒既可减轻或消除。   
    4、取少许牙膏,或碾碎的薄荷敷在被叮咬处,立刻会感到清凉惬意,痒意顿消。   
    5、取一两片阿司匹林,碾成粉末,用凉水调成糊状,涂抹于患处,也可减轻或消除瘙痒。   
    6、喝粥的时候,不妨等上几分钟,等粥的表面凝成了一层薄膜后,将其涂在蚊虫叮咬处,亦可止痒。   
    7、肥皂涂抹止痒。蚊虫叮咬时,在蚊子的口器中分泌出一种有机酸——蚁酸。这种物质可引起肌肉酸痒,肥皂含高级脂肪酸的钠盐,这种脂肪酸的钠盐水解后显碱性。肥皂的碱性与蚁酸的酸性中和后迅速消除痛痒。   
    8、洗衣粉去痒。用清水冲洗被咬处,不要擦干,然后用一个湿手指头蘸一点洗衣粉涂于被咬处,可立即止痒且红肿很快消失,待红肿消失后可用清水将洗衣粉冲掉。
 

使用替代图片解决网页加载速度慢

分类:个人日志  来源:网络  时间:2011-6-10 0:09:33

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>load test</title>

<script language="javascript" type="text/javascript">
 function hidden(){
  document.getElementById("proc").style.display = "none"
 }

 document.onreadystatechange = stateChange;
 function stateChange() {
  if(document.readyState == ¹complete¹) {
   //alert(¹completely complete¹);
   hidden();
  }
 }
</script>

</head>

<body>
   
 <div id="proc" name="proc">
  <table width="178" height="40" border="0" cellpadding="10" cellspacing="0" >
   <tr align="center" >
    <td class="fontreport">
     <font color="red"><img src="loading.gif" /></font>     
    </td>  
   </tr>
  </table>
 </div> 

 <p><img src="load_test.jpg" /></p>

 <p>当网页中含有较多大图片时,网页加载速度会很慢。有一个很好的解决办法是网页加载过程中暂时使用较小的替代图片先替换要加载的大图,待网页加载完成后再加载大图。</p>

</body>
</html>
 

  • 60
  • |<
  • <<
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • >>
  • >|