如图所示,当鼠标移上canvas区域的时候,显示星星闪烁的效果,星星本身还会有一个缓慢飘动的速度,当星星飘出canvas区域的时候,该星星消失,canvas区域的某个地方又会重生一个星星。

首先准备两张图片:

背景图:girl.jpg

girl.jpg

星星的序列帧图片:star.png

star.png

js库:commonFunctions.js

window.requestAnimFrame = (function() {

return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||

function( /* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {

return window.setTimeout(callback, 1000 / 60);

};

})();

function calLength2(x1, y1, x2, y2) {

return Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2);

}

function randomColor() {

var col = [0, 1, 2];

col[0] = Math.random() * 100 + 155;

col[0] = col[0].toFixed();

col[1] = Math.random() * 100 + 155;

col[1] = col[1].toFixed();

col[2] = Math.random() * 100 + 155;

col[2] = col[2].toFixed();

var num = Math.floor(Math.random() * 3);

col[num] = 0;

return "rgba(" + col[0] + "," + col[1] + "," + col[2] + ",";

}

function lerpAngle(a, b, t) {

var d = b - a;

if (d > Math.PI) d = d - 2 * Math.PI;

if (d < -Math.PI) d = d + 2 * Math.PI;

return a + d * t;

}

function inOboundary(arrX, arrY, l, r, t, b) { //在l r t b范围内的检测

return arrX > l && arrX < r && arrY > t && arrY < b;

}

function rgbColor(r, g, b) {

r = Math.round(r * 256);

g = Math.round(g * 256);

b = Math.round(b * 256);

return "rgba(" + r + "," + g + "," + b + ",1)";

}

function rgbNum(r, g, b) {

r = Math.round(r * 256);

g = Math.round(g * 256);

b = Math.round(b * 256);

return "rgba(" + r + "," + g + "," + b;

}

function rnd(m) {

var n = m || 1;

return Math.random() * n;

}

function rateRandom(m, n) {

var sum = 0;

for (var i = 1; i < (n - m); i++) {

sum += i;

}

var ran = Math.random() * sum;

for (var i = 1; i < (n - m); i++) {

ran -= i;

if (ran < 0) {

return i - 1 + m;

}

}

}

function distance(x1, y1, x2, y2, l) {

var x = Math.abs(x1 - x2);

var y = Math.abs(y1 - y2);

if (x < l && y < l) {

return true;

}

return false;

}

function AABBbox(object1, w1, h1, object2, w2, h2, overlap) {

A1 = object1.x + overlap;

B1 = object1.x + w1 - overlap;

C1 = object1.y + overlap;

D1 = object1.y + h1 - overlap;

A2 = object2.x + overlap;

B2 = object2.x + w2 - overlap;

C2 = object2.y + overlap;

D2 = object2.y + h2 - overlap;

if (A1 > B2 || B1 < A2 || C1 > D2 || D1 < C2) return false;

else return true;

}

function dis2(x, y, x0, y0) {

var dx = x - x0;

var dy = y - y0;

return dx * dx + dy * dy;

}

function rndi2(m, n) {

var a = Math.random() * (n - m) + m;

return Math.floor(a);

}

项目主文件:index.html

star girl

var can

var ctx

var w

var h

var girlPic=new Image()

var starPic=new Image()

var starNum=60;

var stars=[];

var lastTime;

var deltaTime;

var switchy=false;

var life=0;

//循环绘制

function gameloop(){

window.requestAnimFrame(gameloop)

var now=Date.now()

deltaTime=now-lastTime

lastTime=now;

drawBackground()

drawGirl()

drawStars()

aliveUpdate()

}

//绘制背景和女孩图片

function drawBackground(){

ctx.fillStyle="#393550"

ctx.fillRect(0,0,w,h)

}

function drawGirl(){

//drawImage(img,x,y)

ctx.drawImage(girlPic,100,150,600,300)

}

// 绘制星星序列帧图片

var starObj=function(){

this.x;

this.y;

this.picNo;

this.timer;

this.xSpd;

this.ySpd;

}

starObj.prototype.init = function() {

this.x=100+Math.random()*600;

this.y=150+Math.random()*300;

this.picNo=Math.floor(Math.random()*7);

this.timer=0;

this.xSpd=Math.random()*3-1.5

this.ySpd=Math.random()*3-1.5

};

starObj.prototype.update=function(){

this.x+=this.xSpd*deltaTime*0.002;

this.y+=this.ySpd*deltaTime*0.002;

if(this.x<100||this.x>693){

this.init();

return;

}

if(this.y<150||this.y>443){

this.init();

return;

}

this.timer+=deltaTime;

if(this.timer>100){

this.picNo+=1;

this.picNo%=7;

this.timer = 0;

}

}

starObj.prototype.draw = function() {

// globalAlpha全局透明度

ctx.save()

ctx.globalAlpha=life

ctx.drawImage(starPic,this.picNo*7,0,7,7,this.x,this.y,7,7);

ctx.restore()

};

//绘制星星

function drawStars(){

for (var i = 0; i < starNum; i++) {

stars[i].update()

stars[i].draw()

}

}

// 鼠标移动事件

function mousemove(e){

if (e.offsetX||e.layerX) {

var px=e.offsetX==undefined?e.layerX:e.offsetX;

var py=e.offsetY==undefined?e.layerY:e.offsetY;

if (px>100&&px<700&&py>150&&py<450){

switchy=true

}else{

switchy=false

}

}

}

//控制星星显示

function aliveUpdate(){

if(switchy){

// show Star

life+=0.03*deltaTime*0.05

if (life>1) {

life=1

}

}else{

life-=0.03*deltaTime*0.05

if (life<0) {

life=0

}

// hide Star

}

}

function init(){

can=document.getElementById("canvas")

ctx=can.getContext('2d')

w=can.width;

h=can.height;

document.addEventListener('mousemove',mousemove,false)

girlPic.src="src/girl.jpg"

starPic.src="src/star.png"

//星星的位置初始化

for (var i = 0; i < starNum; i++) {

var obj=new starObj();

stars.push(obj)

stars[i].init()

}

lastTime=Date.now()

gameloop()

}

init()

文件目录如下:

image.png

android星星闪效果,使用Canvas绘制星星闪烁的效果相关推荐

  1. 利用canvas绘制的拓扑动画效果

    展示效果网址 reloadimage(callback){let imgArrs = [];this.imgArray.forEach((img,index,arrs)=>{imgArrs[in ...

  2. html弧形列表效果,JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例

    本文实例讲述了JavaScript+html5 canvas绘制的圆弧荡秋千效果.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: demo #canvas { margin:50 ...

  3. canvas绘制城市3D模型效果

    下载地址canvas绘制城市3D模型效果HTML5代码,款3D酷炫的城市建筑模型,鼠标长按或拖动穿过建筑模型动画特效. dd:

  4. android绘制环形进度_Android使用Canvas绘制圆形进度条效果

    前言 Android自定义控件经常会用到Canvas绘制2D图形,在优化自己自定义控件技能之前,必须熟练掌握Canvas绘图机制.本文从以下三个方面对Canvas绘图机制进行讲解: 画布Canvas ...

  5. html 画动画效果,html5 canvas绘制曲线动画特效

    特效描述:html5 canvas绘制 曲线动画特效. 代码结构 1. HTML代码 Balls Size Speed Delay Go! Presets: Atomic Flower Spiro Y ...

  6. html5刮奖效果,HTML5+Canvas实战之刮奖效果

    项目描述 HTML5+Canvas实战之刮奖效果,实现网页上刮奖,可以用作验证码: 可以在移动设备上和PC端网页(浏览器要支持canvas)上运行 ##使用说明 var lottery = new L ...

  7. android canvas光晕绘制_android用canvas绘制两种波纹效果

    波形效果有几种不同的呈现形式,比如从中间向四周散开的波形,也就是熟知的水涟漪:还有上下波动的曲线,像五线谱等.英文中可以称作Wave或者Ripple,所以暂且叫它们WaveView.WaveLayou ...

  8. 【Canvas】js用Canvas绘制阴阳太极图动画效果

    学习JavaScript是否兴趣缺缺,那就需要来一个兴趣学习,问一下有没有兴趣用Canvas画图呢,可以画很多有趣的事物,自由发挥想象,收获多多哦,这里有一个例子,如何用canvas画阴阳太极图动图效 ...

  9. canvas绘制简单的霓虹灯效果

    canvas简单动画分为三个步骤: 1.清除画布区域的内容: 2.重绘: 3.执行requestAnimationFrame(); 这个霓虹灯效果的demo,我没有用requestAnimationF ...

  10. android+canvas+图片,android 开发 View _12_ 用Canvas 绘制一张图片(博客中演示用Canvas画验证码图片)...

    packagenet.yt.yuncare.widgets;importandroid.graphics.Bitmap;importandroid.graphics.Canvas;importandr ...

最新文章

  1. Ant Design Pro 网络请求,视图绑定model并且渲染到页面 umi-request
  2. 监控软件nagios之配置文件详解
  3. 精益 React 学习指南 (Lean React)- 3.4 掌控 redux 异步
  4. 启动转换安装失败 拷贝windows安装文件时出错_系统小技巧:“徒手”创建可启动的VHD系统...
  5. android--service之aidl传递复杂对象,Android--Service之AIDL传递复杂对象
  6. 2021蛋白组学研究常用数据库汇总整理
  7. Leetcode 14.最长公共前缀
  8. 实战:基于RabbitMQ的TTL以及死信队列,实现延迟付款,手动补偿案例
  9. 关键字nullable,nonnull,null_resettable,_Null_unspecified详解
  10. 以下属于单例模式的优点的是_单例模式的优缺点和使用场景
  11. com.netflix.zuul.exception.ZuulException: Forwarding error
  12. python爬虫——当当网商品比价爬虫
  13. Datalogic得利捷推出具有强大视觉系统功能的紧凑型智能相机P2X系列
  14. Win11dll文件缺失怎么修复?Win11系统dll文件丢失的解决方法
  15. usboot应用两篇:用USBOOT修理移动硬盘等
  16. html打印成pdf页面大小,pdf页面大小调整 pdf打印页边距怎么设置
  17. u盾如何在计算机上使用方法,u盾在电脑中具体使用操作过程
  18. 使用jQuery easyui和Springdata JPI进行数据的查询
  19. MarkdownPad2 的基本使用
  20. shell判断给定日期是否是周末or月末

热门文章

  1. IBM这20年(1999-2019)
  2. QTableWidget获取一行数据
  3. 一网打尽寄存器、SRAM、DRAM、主存、磁盘、闪存、固态硬盘SSD
  4. less和css的区别是什么
  5. 龙贝格算法的实现以及与复合梯形公式精度的比较
  6. MySQL传统无损同步
  7. 网站服务器登录很慢,网站打开速度慢如何解决?有何技巧?
  8. android studio项目总结,Android Studio 使用总结
  9. 关于mysql union 之后 排序乱掉
  10. 计算机领域获奖感言,期中考试获奖感言