1. 起点A(0,0) 终点B(100,100),特别注意
var angle = Math.atan2((this.B.y - this.A.y), (this.B.x - this.A.x));
angle如果是正,顺时针旋转,B点减去A点,一定是一个正值,所以顺时针旋转,但是在cocos中一般要的是逆时针旋转,所以前面需要添加一个负号来实现逆时针旋转
var angle = Math.atan2((this.A.y - this.B.y), (this.A.x - this.B.x));
angle如果是负,逆时针旋转,A点减去B点,一定是一个负值,所以逆时针旋转。这个就刚刚好。cocos中一般要的是逆时针旋转
2. 让一个对象朝向另一个对象 旋转角度一
cc.Class({
extends: cc.Component,
properties: {
target:{
default: null,
type:cc.Node
},
},
start () {
let angle = this.getAngle();
this.node.rotation = angle;
},
getAngle() {
//第一种方法,用目标点减去起点,得出angle如果是正,顺时针旋转,但是在cocos中一般要的是逆时针旋转,所以前面需要添加一个负号来实现逆时针旋转
var angle = -Math.atan2((this.target.y - this.node.y), (this.target.x - this.node.x));
//第二种方法,用起点减去目标点,一定是一个负值,所以逆时针旋转。这个就刚刚好。cocos中一般要的是逆时针旋转
var angle = Math.atan2((this.node.y - this.target.y), (this.node.x - this.target.x));
var theta = angle * (180 / Math.PI);
return theta;
},
});
2.让一个对象朝向另一个对象 旋转角度方法二
getAngle() {
//第一种方法,用目标点减去起点,得出angle如果是正,顺时针旋转,但是在cocos中一般要的是逆时针旋转,所以前面需要添加一个负号来实现逆时针旋转
var dx = this.target.x - this.node.x;
var dy = this.target.y - this.node.y;
var dir = cc.v2(dx,dy);
dir.normalizeSelf();
var angle = -Math.atan2(dir.y, dir.x);
var theta = angle * (180 / Math.PI);
return theta;
},
getAngle() {
//第二种方法,用起点减去目标点,一定是一个负值,所以逆时针旋转。这个就刚刚好。cocos中一般要的是逆时针旋转
var dx = this.node.x - this.target.x;
var dy = this.node.y - this.target.y;
var dir = cc.v2(dx,dy);
dir.normalizeSelf();
var angle = Math.atan2(dir.y, dir.x);
var theta = angle * (180 / Math.PI);
return theta;
},
3.让一个对象朝向另一个对象 旋转角度方法三
function lookAtObj(target){
//计算出朝向
var dx = target.x - this.node.x;
var dy = target.y - this.node.y;
var dir = cc.v2(dx,dy);
//计算夹角的参考方向,这里选择x轴正方向
var angle = dir.signAngle(cc.v2(1,0));
//将弧度转换为欧拉角
var degree = angle / Math.PI * 180;
//赋值给节点
this.node.rotation = degree;
}
4.对象--->朝着他的方向移动. cc.Node节点的rotation是一个角度,首先要根据rotation求出他的dir方向.
var angle = this.node.rotation/180*Math.PI;
注意:合成基于 X正方向的方向向量
var dir = cc.v2(Math.cos(angle),Math.sin(angle));
dir.normalizeSelf();
update(dt) {
//注意:angle如果是正,顺时针旋转,angle如果是负,逆时针旋转,但是cocos中一般要的是逆时针旋转。 this.node.rotation可以调整为0 45 90 135 180 270等。
var angle = -this.node.rotation / 180 * Math.PI;
var dir = cc.v2(Math.cos(angle), Math.sin(angle));//Math.cos(0)==1 Math.sin(0)=0;
dir.normalizeSelf();
var moveSpeed = 100;
this.node.x += dt * dir.x * moveSpeed;
this.node.y += dt * dir.y * moveSpeed;
},
5.起点ball1,终点ball2,人物point站立方向朝上,根据ball1和ball2坐标,算出人物point旋转朝向ball2坐标
|
| ball2
|
| ball1
| point(90度)
----------------------
|
|
|
start() {
let angle = this.calculateAngle();
this.point.rotation = angle;
},
calculateAngle() {
let len_y = this.ball2.position.y - this.ball1.y;
let len_x = this.ball2.position.x - this.ball1.x;
let tan_yx = Math.abs(len_y / len_x);
let temp = Math.atan(tan_yx) * 180 / Math.PI;
let angle = 0;
if (len_y > 0 && len_x < 0) {
angle = temp - 90;
}
else if (len_y > 0 && len_x > 0) {
angle = -temp + 90;
}
else if (len_y < 0 && len_x < 0) {
angle = -temp - 90;
}
else if (len_y < 0 && len_x > 0) {
angle = temp + 90;
}
else if (len_y == 0 && len_x != 0) {
angle = len_x < 0 ? -90 : 90;
}
else if (len_x == 0 && len_y != 0) {
angle = len_y < 0 ? 180 : 0;
}
console.log('Temp', temp);
console.log('Angle ', angle)
return angle;
},
6. 向量相减,得到目标向量
起点A(200,100) 目标B(100,200)
A到B的向量 = B点 - A点。 那我们只需要将目标对象的位置 - 自己的位置,即可得到方向向量,方向向量转换为角度
需要认清一个隐含变量,就是这个角度的基准是 X 轴正方向使用向量来表示就是 (1,0)
方法一:
var dx = target.x - this.node.x;
var dy = target.y - this.node.y;
var dir = cc.v2(dx,dy);
//var dir = cc.v2(Math.cos(angle), Math.sin(angle));//Math.cos(0)==1 Math.sin(0)=0;
var angle = dir.signAngle(cc.v2(1,0));
var degree = angle / Math.PI * 180;
this.node.rotation = degree;
方法二:
var dx = this.target.x - this.node.x;
var dy = this.target.y - this.node.y;
var dir = cc.v2(dx,dy);
dir.normalizeSelf();
A到B的向量 = B点 - A点。 那我们只需要将目标对象的位置 - 自己的位置,即可得到方向向量,方向向量转换为角度
顺时针旋转,angle如果是负,逆时针旋转,但是cocos中一般要的是逆时针旋转
var angle = Math.atan2(dir.y, dir.x);
var theta = angle * (180 / Math.PI);
this.node.rotation = -theta;
7.atan2在数学坐标系中,结果为正表示从 X 轴逆时针旋转的角度,结果为负表示从 X 轴顺时针旋转的角度
public static void showAlertDialog(final String title,final String message) {
System.out.println("---------showAlertDialog1------title=" + title);
Cocos2dxJavascriptJavaBridge.evalString("console.log(\"Javascript Java bridge!\")");
System.out.println("---------showAlertDialog22------message=" + message);
// Cocos2dxJavascriptJavaBridge.evalString("cc[\"MainScene\"].javaToJs(\"abc\")");
Cocos2dxJavascriptJavaBridge.evalString("cc[\"MainScene\"].javaToJs(\"" + testStr + "\")");
System.out.println("---------showAlertDialog3333------message=" + message);
}
左右手坐标系区别。
y
| z
| /
| /
|—————————— x
左手坐标系(x,y,z正方形)
y
|
|
|
|—————————— x
/
/
z
右手坐标系(x,y,z正方形)
8.音频的坐标系是音频是fps第一视角 右手坐标系 (前后是z轴,左右是x)向前的是z的复轴,Y轴是上下,我们没用到.
y1
| -z1
| /
| /
|—————————— x1
/
/
z1
3d
9.cocos creater是2d的,你的2d是上帝视角你看上去
y200
|
| 2d
|
|-------------x100
把3d音频的放到2d的场景里面去就变成了。
-z(-200)
|
| 2d
|
|-------------x100
x100 y0 z-200
比喻2d场景建筑(x100,y200 ,z0 )
转换音频坐标系
audioManager.wts(x100, y0, z-200)
10.战斗场景2个摄像机
1.Main Camera(主角摄像机,主角移动,摄像机也移动)
Depth
-1
cullingMask
default
color
Depth
Stencil
2.UiCamera(UI摄像机,对应GameUi界面层,界面不移动)
Depth
1
cullingMask
GameUi
Depth
Stencil
数学:
顺时针:由右上方向下,然后转向左(+)
逆时针:由左上方向下,然後转向右(-)
cocos
顺时针:由右上方向下,然后转向左(-)
逆时针:由左上方向下,然後转向右(+)
var angle=0
this.node.angle = angle - 90=-90
方向右-->
var angle=90
this.node.angle = angle - 90=0
x
|
|
方向朝上
var angle=180
this.node.angle = angle - 90=90
方向左<---
var angle=270
this.node.angle = angle - 90=180
方向朝下
|
|
x
根据角度算出 极坐标(x=r.cos,y=r.sin) 就是移动坐标
var angle=0;//[1.00,0.00]
this.offset = cc.v2(Math.floor(Math.cos(Math.PI / 180 * angle)), Math.floor(Math.sin(Math.PI / 180 * angle)))
var angle=30;//[0.87, 0.50]
this.offset = cc.v2(Math.floor(Math.cos(Math.PI / 180 * angle)), Math.floor(Math.sin(Math.PI / 180 * angle)))
var angle=40;//[0.77, 0.64]
this.offset = cc.v2(Math.floor(Math.cos(Math.PI / 180 * angle)), Math.floor(Math.sin(Math.PI / 180 * angle)))
var angle=45;//[0.71, 0.71]
this.offset = cc.v2(Math.floor(Math.cos(Math.PI / 180 * angle)), Math.floor(Math.sin(Math.PI / 180 * angle)))
var angle=60;//[0.50, 0.87]
this.offset = cc.v2(Math.floor(Math.cos(Math.PI / 180 * angle)), Math.floor(Math.sin(Math.PI / 180 * angle)))
var angle=70;//[0.34, 0.94]
this.offset = cc.v2(Math.floor(Math.cos(Math.PI / 180 * angle)), Math.floor(Math.sin(Math.PI / 180 * angle)))
var angle=80;//[0.17, 0.98]
this.offset = cc.v2(Math.floor(Math.cos(Math.PI / 180 * angle)), Math.floor(Math.sin(Math.PI / 180 * angle)))
var angle=90;//[0.00, 1.00]
this.offset = cc.v2(Math.floor(Math.cos(Math.PI / 180 * angle)), Math.floor(Math.sin(Math.PI / 180 * angle)))
var angle=0
if (angle == 0 || angle == 180 || angle == 90) {
this.offset = cc.v2(Math.floor(Math.cos(Math.PI / 180 * angle)), Math.floor(Math.sin(Math.PI / 180 * angle)));//10 -10 01
} else if (angle == 270) {
this.offset = cc.v2(Math.ceil(Math.cos(Math.PI / 180 * angle)), Math.floor(Math.sin(Math.PI / 180 * angle))); //-1 -1
} else {
this.offset = cc.v2(Math.cos(Math.PI / 180 * angle), Math.sin(Math.PI / 180 * angle));
}
//1.朝向有了,朝向的坐标有了。就可以移动了。
update: function (dt) {
this.node.x += this.offset.x * moveSpeed * dt;
this.node.y += this.offset.y * moveSpeed * dt;
}