android星星闪效果,使用Canvas绘制星星闪烁的效果
如图所示,当鼠标移上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绘制星星闪烁的效果相关推荐
- 利用canvas绘制的拓扑动画效果
展示效果网址 reloadimage(callback){let imgArrs = [];this.imgArray.forEach((img,index,arrs)=>{imgArrs[in ...
- html弧形列表效果,JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例
本文实例讲述了JavaScript+html5 canvas绘制的圆弧荡秋千效果.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: demo #canvas { margin:50 ...
- canvas绘制城市3D模型效果
下载地址canvas绘制城市3D模型效果HTML5代码,款3D酷炫的城市建筑模型,鼠标长按或拖动穿过建筑模型动画特效. dd:
- android绘制环形进度_Android使用Canvas绘制圆形进度条效果
前言 Android自定义控件经常会用到Canvas绘制2D图形,在优化自己自定义控件技能之前,必须熟练掌握Canvas绘图机制.本文从以下三个方面对Canvas绘图机制进行讲解: 画布Canvas ...
- html 画动画效果,html5 canvas绘制曲线动画特效
特效描述:html5 canvas绘制 曲线动画特效. 代码结构 1. HTML代码 Balls Size Speed Delay Go! Presets: Atomic Flower Spiro Y ...
- html5刮奖效果,HTML5+Canvas实战之刮奖效果
项目描述 HTML5+Canvas实战之刮奖效果,实现网页上刮奖,可以用作验证码: 可以在移动设备上和PC端网页(浏览器要支持canvas)上运行 ##使用说明 var lottery = new L ...
- android canvas光晕绘制_android用canvas绘制两种波纹效果
波形效果有几种不同的呈现形式,比如从中间向四周散开的波形,也就是熟知的水涟漪:还有上下波动的曲线,像五线谱等.英文中可以称作Wave或者Ripple,所以暂且叫它们WaveView.WaveLayou ...
- 【Canvas】js用Canvas绘制阴阳太极图动画效果
学习JavaScript是否兴趣缺缺,那就需要来一个兴趣学习,问一下有没有兴趣用Canvas画图呢,可以画很多有趣的事物,自由发挥想象,收获多多哦,这里有一个例子,如何用canvas画阴阳太极图动图效 ...
- canvas绘制简单的霓虹灯效果
canvas简单动画分为三个步骤: 1.清除画布区域的内容: 2.重绘: 3.执行requestAnimationFrame(); 这个霓虹灯效果的demo,我没有用requestAnimationF ...
- android+canvas+图片,android 开发 View _12_ 用Canvas 绘制一张图片(博客中演示用Canvas画验证码图片)...
packagenet.yt.yuncare.widgets;importandroid.graphics.Bitmap;importandroid.graphics.Canvas;importandr ...
最新文章
- Ant Design Pro 网络请求,视图绑定model并且渲染到页面 umi-request
- 监控软件nagios之配置文件详解
- 精益 React 学习指南 (Lean React)- 3.4 掌控 redux 异步
- 启动转换安装失败 拷贝windows安装文件时出错_系统小技巧:“徒手”创建可启动的VHD系统...
- android--service之aidl传递复杂对象,Android--Service之AIDL传递复杂对象
- 2021蛋白组学研究常用数据库汇总整理
- Leetcode 14.最长公共前缀
- 实战:基于RabbitMQ的TTL以及死信队列,实现延迟付款,手动补偿案例
- 关键字nullable,nonnull,null_resettable,_Null_unspecified详解
- 以下属于单例模式的优点的是_单例模式的优缺点和使用场景
- com.netflix.zuul.exception.ZuulException: Forwarding error
- python爬虫——当当网商品比价爬虫
- Datalogic得利捷推出具有强大视觉系统功能的紧凑型智能相机P2X系列
- Win11dll文件缺失怎么修复?Win11系统dll文件丢失的解决方法
- usboot应用两篇:用USBOOT修理移动硬盘等
- html打印成pdf页面大小,pdf页面大小调整 pdf打印页边距怎么设置
- u盾如何在计算机上使用方法,u盾在电脑中具体使用操作过程
- 使用jQuery easyui和Springdata JPI进行数据的查询
- MarkdownPad2 的基本使用
- shell判断给定日期是否是周末or月末