XYZBLOG

WELCOME
« »
SuMoTuWeThFrSa
1234
567891011
12131415161718
19202122232425
2627282930
新近评论
新近留言
友情链接
  1. 友情链接 (1)
统计信息
  • 日志: 28
  • 评论: 2
  • 留言: 0
  • 链接: 1
  • 引用: 0
  • 访问: 27242
相册 普通 列表 管理

爬山代码

原创代码 | 2009-02-19 13:50
import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Matrix;
this.createEmptyMovieClip("man_mc", _root.getNextHighestDepth());
man_mc.beginFill(0xFF0000, 100);
man_mc.moveTo(0, 0);
man_mc.lineTo(-20, -80);
man_mc.lineTo(20, -80);
man_mc.endFill();
man_mc._x = 200;
this.createEmptyMovieClip("action_mc", _root.getNextHighestDepth());
action_mc._y = 500;
//山的初始位置
var fillColor = 0x9999FF;
//山的颜色
var totalWidth = 1500;
var x0 = 0;
var y0 = action_mc._y;
var dy = 20;
var y_arr:Array = [];
var rate = 200;
var timeCount = 0;
var timeRate = 20;
//控制多少桢绘画出新的山峰(谷),必须是能被rate整除的数
var scaley = 2;
//鼠标差值和产生的山峰(谷)的比例,值越大波浪越小
for (var i = 0; i<=Math.floor(totalWidth/rate+1); i++) {
  y_arr.push(Math.random()*(Stage.height-action_mc._y)/scaley);
}
//action_mc.lineStyle(5, 0xFF00FF, 100);
drawPic = function () {
  action_mc.clear();
  action_mc.beginFill(fillColor, 100);
  action_mc.moveTo(0, (y_arr[0]+y_arr[1])/2+dy/2);
  for (var i = 1; i<=y_arr.length-1; i += 1) {
    action_mc.curveTo(i*rate-rate/2, y_arr[i]-i*dy+dy, i*rate, (y_arr[i]+y_arr[i+1])/2-i*dy+dy/2);
  }
  action_mc.lineTo((y_arr.length-1)*rate, 400);
  action_mc.lineTo(0, 400);
  action_mc.endFill();
};
drawPic();
_root.onEnterFrame = function() {
  action_mc._x -= rate/timeRate;
  action_mc._y += dy/timeRate;
  timeCount++;
  if (timeCount%timeRate == 0) {
    y_arr.shift();
    y_arr.push(action_mc._ymouse/scaley);
    if (timeCount%(timeRate*2) == 0) {
    }
    action_mc._x = x0;
    action_mc._y = y0;
  }
  drawPic();
  var manSpeed = rate/(timeRate*2);
  var manDx = _root._xmouse-man_mc._x;
  if (Math.abs(manDx)>manSpeed) {
    man_mc._x += (manDx>0) ? manSpeed : (-manSpeed);
  }
  man_mc._y = getY(man_mc._x);
};
var getY = function (x):Number {
  var bb:BitmapData = new BitmapData(action_mc._width, Stage.height, true, 0);
  bb.draw(action_mc, new Matrix(1, 0, 0, 1, action_mc._x, action_mc._y));
  var y = 0;
  while (bb.getPixel(x, y) == !fillColor) {
    y++;
  }
  bb.dispose();
  return (y);
};
不知道有没有更高效的方法,欢迎拍砖,测试:
http://127.0.0.1/blog/trackback.asp?q=502261124
姓名: 密码:
主页: 私密:

验证码:
    2  3  4  5  6  7  8  9  10  11