XYZBLOG

WELCOME
« »
SuMoTuWeThFrSa
1234
567891011
12131415161718
19202122232425
2627282930
新近评论
新近留言
友情链接
  1. 友情链接 (1)
统计信息
  • 日志: 28
  • 评论: 2
  • 留言: 0
  • 链接: 1
  • 引用: 0
  • 访问: 27241
相册 普通 列表 管理
改进了网上流传的像素级碰撞检测,支持旋转后的mc检测,可以用于飞机游戏.
package general{
  import flash.display.*;
  import flash.geom.*;

  public class HitTest {
    //按像素检测
    private static function _hitTest(shape1:DisplayObject, shape2:DisplayObject):Boolean {
      var rect1:Rectangle = shape1.getRect(shape1.stage);
      var rect2:Rectangle = shape2.getRect(shape2.stage);
      var p1x:Number = rect1.x;
      var p1y:Number = rect1.y;
      var p2x:Number = rect2.x;
      var p2y:Number = rect2.y;

      var p1w:Number = rect1.width;
      var p1h:Number = rect1.height;
      var p2w:Number = rect2.width;
      var p2h:Number = rect2.height;
      p1w = p1w<1?1:p1w;
      p1h = p1h<1?1:p1h;
      p2w = p2w<1?1:p2w;
      p2h = p2h<1?1:p2h;
      
      var BmpData1:BitmapData = new BitmapData(p1w, p1h, true, 0x00000000);
      var BmpData2:BitmapData = new BitmapData(p2w, p2h, true, 0x00000000);
      
      var ma1:Matrix = getMatrix(shape1);
      var ma2:Matrix = getMatrix(shape2);
      
      BmpData1.draw(shape1, ma1);
      BmpData2.draw(shape2,ma2);
      
      var gp1:Point = new Point(p1x,p1y);
      var gp2:Point = new Point(p2x,p2y);
      var re:Boolean = BmpData1.hitTest(gp1, 0x05, BmpData2, gp2, 0x05); 
      
      BmpData1.dispose();
      BmpData2.dispose();
      return re;
    }
    
    static private function getMatrix(shape:DisplayObject):Matrix{
      var matrix:Matrix = new Matrix;
      var rect:Rectangle
      if (shape.parent) {
        var rot:Number = shape.rotation;
        matrix.rotate((shape.parent.rotation + rot) * Math.PI / 180) ;
        shape.rotation += shape.parent.rotation;
        rect = shape.getRect(shape.parent);
        matrix.tx = shape.x - rect.x;
        matrix.ty = shape.y - rect.y;
        shape.rotation = rot;
      }else {
        rect = shape.getRect(shape.parent);
        matrix.rotate(shape.rotation*Math.PI/180)
        matrix.tx = shape.x - rect.x;
        matrix.ty = shape.y - rect.y;   
      }
      return matrix;
    }
    //按矩形区域检测
    public static function hitTestRect(shape1:DisplayObject,shape2:DisplayObject):Boolean {
      if (shape1.hitTestObject(shape2))
        return true;
      return false;
    }
    //按点和形状检测
    public static function hitTestPoint(point:Point,shape:DisplayObject):Boolean {
      if (shape.hitTestPoint(point.x,point.y,true))
        return true;
      return false;
    }
    
    //按形状检测,这个方法很实用,先用效率高的hitTestObject判断是否可能碰撞,一旦发生碰撞了再用效率低的也就是网上流传的像素级碰撞检测的方法去判断
    public static function hitTestShape(shape1:DisplayObject,shape2:DisplayObject):Boolean {
      var hit:Boolean = false;
      if (shape1.hitTestObject(shape2)) {
        if (shape2.width<20 && shape2.height<20) {
          hit = true;
        } else {
          if (HitTest._hitTest(shape1,shape2)) {
            hit = true;
          }
        }
      }
      return hit;
    }
  }
}
<script>
function copyToClipboard(txt) {
  //alert(txt);
  if (window.clipboardData) {
    window.clipboardData.clearData();
    window.clipboardData.setData("Text", txt);
  } else if (navigator.userAgent.indexOf("Opera") != -1) {
    window.location = txt;
  } else if (window.netscape) {
    try {
      netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
    } catch (e) {
      alert("被浏览器拒绝!\n请在浏览器地址栏输入'about:config'并回车\n然后将'signed.applets.codebase_principal_support'设置为'true'");
    }
    var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
    if (!clip) {
      return;
    }
    var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
    if (!trans) {
      return;
    }
    trans.addDataFlavor('text/unicode');
    var str = new Object();
    var len = new Object();
    var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
    var copytext = txt;
    str.data = copytext;
    trans.setTransferData("text/unicode", str, copytext.length*2);
    var clipid = Components.interfaces.nsIClipboard;
    if (!clip) {
      return false;
    }
    clip.setData(trans, null, clipid.kGlobalClipboard);
    //alert("复制成功");
  }
  alert("地址复制成功,请粘贴给你好友的msn转发");
}
</script>
function randomSort(elementA:Object, elementB:Object):Number {
  var xx=Math.floor(Math.random()*2)*2-1;
  return xx;
}
var numbers:Array = new Array( );
for (var i:int=0; i<20; i++) {
  numbers[i] = i;
}
numbers.sort(randomSort);
trace(numbers);
trace(ord("A"));
SWF 文件的 URL:_root._url
var b = 100;
var c = true;
function changeC() {
//document.getElementById("mainhead").style.visibility="visible";
//document.getElementById("mainmiddle").style.visibility="visible";
//document.getElementById("mainfoot").style.visibility="visible";
  if (c) {
    c = false;
  } else {
    c = true;
  }
  fade();
}
function fade() {
  //target=document.getElementById(targetid);
  //target2=document.getElementById(targetid2);
  //target3=document.getElementById(targetid3);
  if (document.all) {
  }
  if (b>0) {
    b -= 1;
    setTimeout("fade()", 40);
  }else {}
  //target.style.filter = "alpha(opacity=" + 50 + ")"; 
  //target2.style.filter = "alpha(opacity=" + 50 + ")"; 
  //target3.style.filter = "alpha(opacity=" + 50 + ")";
  document.getElementById("mainhead").style.MozOpacity = b/100;
  document.getElementById("mainmiddle").style.MozOpacity = b/100;
  document.getElementById("mainfoot").style.MozOpacity = b/100;
  document.getElementById("mainhead").filters.alpha.opacity = 0+b;
  document.getElementById("mainmiddle").filters.alpha.opacity = 0+b;
  document.getElementById("mainfoot").filters.alpha.opacity = 0+b;
  //target2.filters.alpha.opacity= b;
  //target3.filters.alpha.opacity= b;
}

div层上:
<div id="mainmiddle" style="FILTER: alpha(opacity=0)">
flash调用:getURL("javascript:changeC()")
新建一个test.fla文档,添加一个动态文本框变量取做myVar,ctrl+enter发布;
新建一个htm文档,贴上以下代码:object 标签内的是打开页面就传参数的方法,只能传一次,下面的是用js的方法,可以传多次:

<object name="myFlash" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="640" height="480" title="na">
 <param name="movie" value="test.swf" />
  <param name="FlashVars" value="myVar=111111" />
 <param name="quality" value="high" />
 <embed src="test.swf" FlashVars="myVar=111111" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="640" height="480"></embed>
</object>
<SCRIPT>
  function doPassVar(args) {
  alert(args)
  var sendText = args;
  window.document.myFlash.SetVariable("myVar", sendText);
}
xx="22222"
yy="33333"
</SCRIPT>
<body onload="javascript:doPassVar(xx)">
<input name="" type="button" onClick="javascript:doPassVar(yy)" /></body>
测试页面:080110_text.htm
原文件:080110_test.fla

localToGlobal

常用代码 | 2008-01-07 17:32
public localToGlobal(pt:Object) : Void

将 pt 对象从影片剪辑(本地)坐标转换为舞台(全局)坐标。

用法:
var point:Object = {x:0, y:0};
t_mc.localToGlobal(point);
trace(l_mc.hitTest(point.x, point.y, true));

转换成16进制

常用代码 | 2008-01-07 15:48
trace("0x"+num.toString(16))
1.登录
mysql -h localhost -u root

2.创建用户firstdb(密码firstdb)和数据库,并赋予权限于firstdb数据库
create database firstdb;
grant all on firstdb.* to firstdb identified by 'firstdb'

会自动创建用户firstdb

mysql默认的是本地主机是localhost,对应的IP地址就是127.0.0.1,所以你用你的IP地址登录会出错,如果你想用你的IP地址登录就要先进行授权用grant命令。
mysql>grant all on *.* to root@202.116.39.2 identified by '123456';

说明:grant 与on 之间是各种权限,例如:insert,select,update等
on 之后是数据库名和表名,第一个*表示所有的数据库,第二个*表示所有的表
root可以改成你的用户名,@后可以跟域名或IP地址,identified by 后面的是登录用的密码,可以省略,即缺省密码或者叫空密码。
drop database firstdb;

3.使用use 指定数据库
use firstdb;
select * from users;

注意:mysql命令以分号结束。

4.创建表
create table firstdb.users(id int, username varchar(40));

5.常用sql
show tables;     显示库中的表名
describe groups;   显示具体的表结构

insert into users(username) values('eking');

6.limit限制查询结果的数量(类似于sql server中的top)

SELECT * FROM users u limit 2;        返回前两条记录

SELECT * FROM users u order by id limit 1,1; 返回第2条记录(两个参数:偏移/限制行数)

分页:如果每页显示10条结果,第一页用limit 0,10 ;第二页用 limit 10, 10

7.Mysql5.0支持的字符集

MySQL中的字符集控制做得比较细,可以分为数据库级,表级, 字段级(这一点和ORACLE不同)。我上次改的字符集是数据库级的,对表sysuser没有影响,所以出现了改了字符集却一样无法插入中文的情况。
DROP TABLE IF EXISTS `firstdb`.`users`;
CREATE TABLE `firstdb`.`users` (
 `id` int(11) NOT NULL auto_increment,
 `username` varchar(40) default NULL,
 `birthday` date default NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;


编译 MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;
安装 MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;
启动 mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的;
此时 character_set_server 被设定为这个默认的字符集;
当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为 character_set_server;
当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集;
在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;
当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;
这个字符集就是数据库中实际存储数据采用的字符集,mysqldump 出来的内容就是这个字符集下的;

Query Browser1.1 对中文输入的支持太差劲了,可以用notebook写好后,再copy过去执行
update firstdb.users set username='以' where id=3;
    1  2