当前位置:   article > 正文

Cocos creator 学习笔记(2)_cocos creator gravity

cocos creator gravity

7.ts  跳转场景

  1. director.loadScene("game");

8  ts--在ts文件声明变量时,前面加上注解   @property,此变量量就可以在cocos creator编辑器里面修改

9  ts  将v2坐标转v3坐标

  1. let locaton:Vec2= event.getLocation();//触摸事件 返回的坐标是世界坐标的位置
  2. this.curPos=v3(locaton.x,locaton.y,0);//将当前设置为手指或者鼠标

10  点击事件返回的坐标是世界坐标的位置,而小飞机是canvas的子节点  ,

this.node.setPosition(this.curPos);

上面代码设置的是相对于canvas的坐标

this.node.parent.getComponent(UITransform).convertToNodeSpaceAR(v3(locaton.x,locaton.y,0));

this.node.parent:获取到局部的canvas节点

.getComponent(UITransform) :获取到UITransform组件下的convertToNodeSpaceAR属性

将v2坐标转为v3坐标

11.了解常驻界面的概念常驻节点介绍

12节点池 

NodePool

13 find方法

获取节点  

this.presistNode=find("PresistNode");;

获取节点的属性

this.presistNode.getComponent(PresistNode).

【presistNode为节点对象】【PresistNode为presistNode节点绑定的ts脚本】

14播放动画

15  绑定普通的碰撞监听

  1. let collider:Collider2D=this.getComponent(Collider2D);
  2. if(collider){
  3. collider.on(Contact2DType.BEGIN_CONTACT,this.onBeginConcat,this)
  4. }
  1. onBeginConcat(selt:Collider2D,other:Collider2D,contact:IPhysics2DContact|null){
  2. }

other参数 是被碰撞的节点   

other.node  就可以获得被碰撞的node

other.getComponent(绑定的js)//可以获取被绑定的js

 other.node.getChildByName("节点名称")//可以获得被碰撞的节点

16播放音效

先引入AudioSource组件

声明AudioClip类型,引入音效

  1. @property(AudioClip)
  2. gameBackMusic:AudioClip=null;//集中敌机音效

播放音乐

this.node.getComponent(AudioSource).playOneShot(this.gameBackMusic);

17 将节点添加到Canvas节点上去

 find("Canvas").addChild
  1. let anim=this.presistNode.getComponent(PresistNode).animFactory.createAnim();
  2. anim.setPosition(this.node.getPosition())
  3. find("Canvas").addChild(anim);
  4. anim.getComponent(Animation).play();

 anim.getComponent(Animation).play()//Animation  需要收到导入,将 Animation复制到上面cc的位置,play方法  播放动画

动画节点自动删除

第一个箭头添加帧事件

然后填写贞事件名字,再事件方法里面清楚节点

18绑定键盘输入事件

  input.on(Input.EventType.KEY_DOWN, this.onKeyDown, this);
  1. onKeyDown(event: EventKeyboard) {
  2. console.log(event)
  3. switch (event.keyCode) {
  4. case KeyCode.KEY_W:
  5. console.log('上');
  6. break;
  7. case KeyCode.KEY_S:
  8. console.log('下');
  9. break;
  10. case KeyCode.KEY_A:
  11. console.log('左');
  12. break;
  13. case KeyCode.KEY_D:
  14. console.log('右');
  15. break;
  16. }
  17. }

19刚体问题

现在一个单色节点,然后在节点上添加刚体组件,这样的话  滚动的地面就可以用坐标了

20 Ts    加载网络图片

  1. @property({ type: Sprite })
  2. spritee: null;
  3. assetManager.loadRemote(url,{ext : '.png'}, (err,asset : ImageAsset)=>{
  4. if(err) {
  5. console.log(err);
  6. }
  7. else {
  8. console.log('头像下载成功');
  9. that.spritee.spriteFrame = SpriteFrame.createWithImage(asset);
  10. }
  11. });

21  引入微信API

项目根目录执行

npm i -S weixin-js-sdk
  1. const wx = window['wx'];//避开ts语法检测
  2. 然后
  3. wx.api方法名就行

22scrollview对象获取滑动的位置

scrollview.getScrollOffset();

23获取scrollview的content节点以及他的UI节点

 var conUi=this.scrollview.getChildByName("view").getChildByPath("content").getComponent(UITransform)
      
console.log("content的高度",conUi,conUi.height);

24  ts1文件 挂在预制体1上    ts2文件挂在另一个预制体2上     

预制体2动态添加到预制体1上面的    预制体2的点击事件想通知预制体1

第一步 在ts1文件声明变量(guanfaFab    ts1文件名)

public static ins: guanfaFab = null;

 在ts1文件上start方法里  复制this上下文

  1. start() {
  2. guanfaFab.ins = this
  3. }

第二  在ts2文件去引用

import { guanfaFab } from './guanfaFab';

 btnclick就是ts1文件里的一个方法明

  1. guanfaFab.ins.btnclick(res,this.numNow);

25序列动画

  1. tween(this.node)
  2. .delay(num_delayRandom)
  3. .to(num_toRandom,{scale:new Vec3(1,1,1)})
  4. .to(num_toRandom,{scale:new Vec3(0.3,0.3,0.3)})
  5. .union()
  6. .repeatForever()
  7. .start()
  8. //节点

26大摆锤动画(this.dabaichuiImg这是一个精灵节点)

  1. tween(this.dabaichuiImg.node)
  2. .to(2,{angle:-70})
  3. .to(2,{angle:70})
  4. .union()
  5. .repeatForever()
  6. .start()

27首先点击隐藏的节点用代码显示出来(toukuiK是一个精灵节点)

toukuiK.node.active=true;

28世界坐标转换

1.得到目标节点A的世界坐标 getposition

2.将A的世界坐标转成B的父节点的AR converToNodeSpaceAR

3.用AR的返回值设B的位置setposition

v3_position  是预制体自己的坐标

this.node.getComponent(UITransform)  获取预制体的  组件

v3_position_word  获取的世界坐标

  let v3_position_word=this.node.getComponent(UITransform).convertToWorldSpaceAR(v3_position);

29获取重力加速度

PhysicsSystem2D.instance.gravity

29修改重力加速度(反重力所有有个负号)

PhysicsSystem2D.instance.gravity=new Vec2(gravity.x,-gravity.y);

30获取Collider2D组件  监听碰撞

  1. // let collider=this.getComponent(Collider2D);
  2. // collider?.on(Contact2DType.BEGIN_CONTACT,()=>{
  3. // this.can_jum=true;
  4. // },this);

31获取Collider2D多个组件  监听多个碰撞,使用tag区分

  1. let colliders=this.getComponents(Collider2D);
  2. for(let collider of colliders){
  3. // /如果是底下那个Collider2D触到地面的话 就可以再次跳跃
  4. if(collider.tag==1||collider.tag==2){
  5. let gravity=PhysicsSystem2D.instance.gravity;//获取重力
  6. collider?.on(Contact2DType.BEGIN_CONTACT,()=>{
  7. console.log(collider.tag,PhysicsSystem2D.instance.gravity);
  8. if(collider.tag==1&&Math.sign(gravity.y)>0){
  9. return false;
  10. }else
  11. if(collider.tag==2&&Math.sign(gravity.y)<0){
  12. return false;
  13. }
  14. this.can_jum=true;
  15. },this);
  16. }
  17. }

32  这个sensor  只监听碰撞无实际碰撞效果

33.初始化之后修改刚体大小  这个节点上挂了BoxCollider2D组件,碰撞之后修改他的碰撞范围宽高(碰撞体碰撞后,只有延迟半秒或者几百毫秒之后才能修改他的位置,或者销毁或者碰撞体大小)

  1. var bc= this.bottonXian.getComponent(BoxCollider2D);
  2. bc.size=new Size(10,10);
  3. bc.apply();
  4. }

34  节点顺时针旋转(这是Node节点)

  1. angle:number;
  2. update(deltaTime: number) {
  3. this.angle=this.angle+1;
  4. if(this.angle>=360){
  5. this.angle=0;
  6. }
  7. this.bottonXian11.angle= -this.angle;
  8. }

35触摸随之移动

更改触摸改变的x和y的变量,没有进行世界坐标的转换

  1. // 鼠标按下时候触发
  2. this.node.on(Node.EventType.TOUCH_START , (event) => {
  3. console.log('当手指触点落在目标节点区域内时');
  4. }, this);
  5. // 松开时候
  6. this.node.on(Node.EventType.TOUCH_MOVE , (event) => {
  7. let delta=event.getDelta();
  8. var pos=this.node.getPosition();
  9. pos.x=pos.x+delta.x;
  10. pos.y=pos.y+delta.y;
  11. this.node.setPosition(pos);
  12. }, this);

36  接收多个同类型的节点Ts

  1. @property({type:[Label]})
  2. numLabel = []

37两个同是静态的刚体  不会触发碰撞监听,如果想要手动拖动刚体与另一个静态的刚体监听碰撞

可以将手拖动的刚体改成动态的,然后重力改成0就行了

37.获取屏幕的实际宽高

view.getVisibleSize()

38.修改节点位移

 bgView.position=v3(20,20,0);

39缓存数据到本地

  1. cc.sys.localStorage.setItem('help', '999999999999999'); //存储数据
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/152570
推荐阅读
相关标签
  

闽ICP备14008679号