Make Things Move -- Javascript html5版(三)三角函数形式的动画
角度制和弧度制
生活中通常是用角度度来理解的,代码里都是用弧度制来计算。
角度转弧度:DEG_TO_RAD = Math.PI / 180
弧度装角度:RAD_TO_DEG = 180 / Math.PI
正弦:Math.sin
波形:

y轴的值会在-1和1的区间波动,只要我们指定一个范围值,比如50,乘于这个范围值就能得到一个在50~-50间的波形。应用于代码中,实现一个小球按正弦波运动的例子,设定相应的变量:
angle: 角度(即x轴的值)
range: 范围(半径)
speed: 角速度 (x变化的速度)
var SinWaveMove = __class__(Ball, {
__init__: function () {
Ball.call(this)
this.init()
},
init: function () {
// 设置球在浏览器的左中位置
this.y = stage.height / 2
this.angle = 0
this.speed = 0.01
this.range = 500
},
onenter: function () {
this.x = Math.sin(this.angle) * this.range
}
})
余弦:Math.cos
余弦的波形效果其实也差不多,可以自己实验一下,把上面的Math.sin替换成Math.cos即可.
圆周运动
其实就是正统函数和余弦函数配合使用,x轴的值用Math.sin算y轴的值用Math.cos算,共同的半径,同一个角度值来算。小球做圆周运动的例子:
var CircularWave = __class__(Ball, {
__init__: function () {
Ball.call(this)
this.init()
},
init: function () {
// 设置球在浏览器的中心位置
this.x = this.cx = stage.width / 2
this.y = this.cy = stage.height / 2
this.angle = 0
this.speed = 0.01
this.radius = 500
},
onenter: function () {
this.x = Math.sin(this.angle) * this.radius + this.cx
this.y = Math.cos(this.angle) * this.radius + this.cy
}
})
椭圆运动
其实是圆周运动一样,只是把x轴和y轴的半径设置成不同大小的值就OK了,可以自己试试。
反正切:Math.atan2
因为这个比较有用,用于计算出两点间的偏移角度:angle = Math.atan2(y2 - y1, x2 - x1) // 这个得到的结果是弧度制的。
一个箭头指向鼠标的demo:
var Arrow = __class__(Sprite, {
__init__: function (attr) {
Sprite.call(this, attr)
},
init: function () {
this.x = stage.width / 2
this.y = stage.height / 2
},
draw: function (ctx) {
// 画出一个红色的箭头
ctx.fillStyle = 'red'
ctx.beginPath()
ctx.moveTo(-50, -50)
ctx.lineTo(0, -50)
ctx.lineTo(0, -100)
ctx.lineTo(50, 0)
ctx.lineTo(0, 100)
ctx.lineTo(0, 50)
ctx.lineTo(-50, 50)
ctx.lineTo(-50, -50)
ctx.fill()
}
})
var arrow = new Arrow()
stage.add(arrow)
var RAD_TO_DEG = 180 / Math.PI
document.body.onmouseover = function (e) {
var rotate = Math.atan2(e.y - arrow.y, e.x - arrow.x)
arrow.rotation = rotate * RAD_TO_DEG
}
Make Things Move -- Javascript html5版(三)三角函数形式的动画的更多相关文章
- Make Things Move -- Javascript html5版(一)文件目录结构和工具方法准备
从这一篇开始,就来开始我们的make things move之旅吧 在此之前,要知道ActionScript(AS)的语法和JS是不一样的,AS是相对于JS而言更好的支持了面向对象的特性,所以我们可以 ...
- Make Things Move -- Javascript html5版(二)实现最基本的Sprite类和stage管理对象
现在这几篇写的都是比较基础的东西,有过相应开发经验的朋友可直接忽略啦. 计算机模拟的动画都是由很多静态的一连串影像(sprite)在一定帧率(fps)内逐帧播放出来的. 对于js来说,我们可以用提供的 ...
- javaScript高程第三版读书笔记
看完<dom编程艺术>现在准备读进阶版的js高程了,由于篇幅较长,所以利用刚看完<dom编程艺术>学到的知识写了段JavaScript代码,来折叠各章的内容.并且应用到了< ...
- JavaScript+html5 canvas实现本地截图教程
这篇文章主要介绍了JavaScript+html5 canvas实现本地截图教程,对截图功能感兴趣的小伙伴们可以参考一下 最近有时间了解了下html5的各API,发现新浪微博的头像设置是使用canva ...
- HTML5版的String Avoider小游戏
HTML5版的String Avoider小游戏 http://www.newgrounds.com/portal/view/300760 蛮简单也蛮考验耐心,从游戏起始点移动鼠标到终点位置,鼠标移动 ...
- javascript+HTMl5游戏下载,开发一个都能月薪上万!舅服你
HTML5时代已经到来许久了,你是否已经掌握了那么一点呢?今天小编给大家讲讲h5的折叠多设备.跨平台特性, 即用HTML5制作游戏.相比flash,HTML5更加灵活方便,随着浏览器技术的不断升级,H ...
- Javascript 创建对象的三种方法及比较【转载+整理】
https://developer.mozilla.org/zh-CN/docs/JavaScript/Guide/Inheritance_and_the_prototype_chain 本文内容 引 ...
- js操作文件 HTML5版
js操作文件 HTML5版,有需要的朋友可以参考下. <!DOCTYPE html> <html> <head> <title>JSFileReader ...
- JavaScript学习记录三
title: JavaScript学习记录三 toc: true date: 2018-09-14 23:51:22 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...
随机推荐
- 从头开始学JavaScript (六)——语句
原文:从头开始学JavaScript (六)--语句 一.条件分支语句:if 基本格式: if (<表达式1>){ <语句组1>}else if (<表达式2> ...
- Windows系统下Redis的安装
Redis是一个用的比较广泛的Key/Value的内存数据库,新浪微博.Github.StackOverflow 等大型应用中都用其作为缓存,Redis的官网为http://redis.io/. 最近 ...
- android ListView之BaseAdapter的使用方式
通常在使用自己定义适配器的时候,我们都会掌握一种固定的模式.充分利用convertView+缓存的方式. private ArrayList<ListBean> list ; privat ...
- hadoop 2.2.0集群安装
相关阅读: hbase 0.98.1集群安装 本文将基于hadoop 2.2.0解说其在linux集群上的安装方法,并对一些重要的设置项进行解释,本文原文链接:http://blog.csdn.net ...
- struts2源代码分析(个人觉得非常经典)
读者如果曾经学习过Struts1.x或者有过Struts1.x的开发经验,那么千万不要想当然地以为这一章可以跳过.实际上Struts1.x与Struts2并无我们想象的血缘关系.虽然Struts2的开 ...
- DataTable相关操作,筛选,取前N条数据,获取指定列数据
DataTable相关操作,筛选,取前N条数据,获取指定列数据2013-03-12 14:50 by Miracle520, 2667 阅读, 0 评论, 收藏, 编辑 1 #region DataT ...
- 真懂JavaScript吗
你真懂JavaScript http://www.cnblogs.com/elegance/p/4195593.html 看了汤姆大叔的“你真懂JavaScript吗?”,里面有5道题目,我都一一作了 ...
- appium之java API(2)
TouchAction AppiumDriver的辅助类,主要针对手势操作,比方滑动.长按.拖动等.TouchAction的原理是讲一系列的动作放在一个链条中,然后将该链条传递给server.serv ...
- python初始化MySQL数据库模板
很基础,但是经常用到,记录一下,省得每次手打 #!/bin/env python # -*- encoding=utf-8 -*- import MySQLdb # Database info hos ...
- [译]Java 设计模式之迭代器
(文章翻译自java-design-pattern-iterator) 迭代器模式用于迭代遍历一个集合对象.它是一个经常被用到的模式,你可能以前使用过它.不管在任何时候你看见一些方法像hasNext( ...