Cocos Creator2D游戏开发(8)-飞机大战(6)-炸机

news2024/9/9 4:54:43
  1. 碰撞
    飞机与飞机碰撞
    子弹与飞机碰撞
    ① 设置碰撞矩阵
    设置碰撞矩阵,就是设置谁跟谁碰撞(添加Enemy,PlayerBullet,Player)
    在这里插入图片描述
    ②设置刚体和碰撞体
    两个预制体设置(Enemy和PlayerBullet)
    注意点: 1. 都在预制体节点上,不在图片上; 2.碰撞体Collider2D中的Editing悬着好之后可以调整碰撞框

在这里插入图片描述
player_node节点刚体和碰撞体设置
在这里插入图片描述
上面是设置刚体和碰撞体的思路;

但是直到现在为止,没有调出跳出我想要的效果,那肯定是我哪里错了;

其实是敌机这块错了; 碰撞肯定是组件跟组件的碰撞,如果把脚本Enemy.ts和enemy_node绑定,碰撞的时候需要操控enemy_node子节点,所以不如把Enemy.ts和enemy_prefab预制体绑定在一块;同时设置刚体和碰撞体;

主要就是这些
在这里插入图片描述
同时修改Enemy.ts脚本

import { _decorator, Component } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('Enemy')
export class Enemy extends Component {

    start() {

    }

    update(deltaTime: number) {
        const pos  = this.node.getPosition();
        if (pos.y < -400) {
            this.node.destroy();
        }else{
            this.node.setPosition(pos.x, pos.y - 5);
        }
    }
}

运行效果是一样的

注意每个刚体上 都选择监听
在这里插入图片描述
然后是碰撞函数: 参考: https://docs.cocos.com/creator/3.8/manual/zh/physics-2d/physics-2d-contact-callback.html
Enemy.ts

import { _decorator, Collider2D, Component, Contact2DType, IPhysics2DContact } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('Enemy')
export class Enemy extends Component {



    private isExplo = false;
    private collider:Collider2D;

    start() {
        this.collider = this.getComponent(Collider2D);
        if (this.collider) {
            this.collider.on(Contact2DType.BEGIN_CONTACT, this.onBeginContact, this); // 碰撞函数注册
        }
    }

    onBeginContact(selfCollider: Collider2D, otherCollider: Collider2D, contact: IPhysics2DContact | null) {

        if (this.isExplo === false) { // 碰撞一次就行了
            this.isExplo = true;
            this.collider.destroy();
            this.scheduleOnce(() => {   // 匿名函数  局部函数            
                this.node.destroy();
            }, 0.02);
        }

    }


    update(deltaTime: number) {
        const pos = this.node.getPosition();
        if (pos.y < -400) {
            this.node.destroy();
        } else {
            this.node.setPosition(pos.x, pos.y - 5);
        }
    }
}

PlayerBullet.ts代码,

import { _decorator, Collider2D, Component, Contact2DType, IPhysics2DContact, Node, Vec3 } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('PlayerBullet')
export class PlayerBullet extends Component {
    private speed: number = 8;
    private _curPos: Vec3 = new Vec3();
    private _targetPos: Vec3 = new Vec3();
    private isExplo = false;

    
    start() {
        let collider = this.getComponent(Collider2D);
        if (collider) {
            collider.on(Contact2DType.BEGIN_CONTACT, this.onBeginContact, this);
        }
    }

    onBeginContact(selfCollider: Collider2D, otherCollider: Collider2D, contact: IPhysics2DContact | null) {
        // 只在两个碰撞体开始接触时被调用一次        
        if (this.isExplo === false) {
            this.isExplo = true;
            // 销毁子弹
            this.scheduleOnce(() => {   // 匿名函数  局部函数            
                this.node.destroy();
            }, 0.1);
        }
    }






    update(deltaTime: number) {
        this.move(0, this.speed);
        // 移动到屏幕外之后进行销毁:
        const pos = this.node.getPosition(); // 获取角色当前位置
        let yy = pos.y;
        if (yy > 400) {
            this.node.destroy();
        }
    }

    move(x, y) {
        this.node.getPosition(this._curPos); // 获取角色当前位置
        Vec3.add(this._targetPos, this._curPos, new Vec3(x, y, 0));    // 计算出目标位置
        this.node.setPosition(this._targetPos); // 将位移设置给角色
    }
}

现在已经可以打飞机了,而且玩家的飞机是无敌的,玩家飞机的碰撞, 不往上贴了
先这样, 晚安!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1961386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#-读取测序数据的ABI文件并绘制svg格式峰图-施工中

本地环境&#xff1a;win10&#xff0c;visual studio 2022 community 目录 前言问题描述解决思路实现效果 前言 本文是在已有的代码基础上进行的开发&#xff0c;前期已经实现&#xff1a; ABI文件的解析峰图的简单绘制svg绘图 对于1&#xff0c;主要用到之前重写的struct包…

大模型面经之bert和gpt区别

BERT和GPT是自然语言处理&#xff08;NLP&#xff09;领域中的两种重要预训练语言模型&#xff0c;它们在多个方面存在显著的区别。以下是对BERT和GPT区别的详细分析。 一、模型基础与架构 BERT&#xff1a; 全称&#xff1a;Bidirectional Encoder Representations from Trans…

系统移植(九)Linux内核移植(未整理)

文章目录 一、概念二、在linux内核源码的arch/arm/configs目录下生成FSMP1A板子对应的默认配置文件三、将自己编写的驱动通过图形化界面的方式编译到内核的镜像文件uImage中&#xff08;一&#xff09;拷贝myled.c和myled.h文件到linux内核源码的drivers/char目录下&#xff08…

第15周 15.1 Zookeeper简介安装及基础使用

1. Zookeeper介绍 1.1 介绍 1.2 应用场景简介 1.3 zookeeper工作原理 1.4 zookeeper特点

Canva收购Leonardo.ai,增强生成式AI技术能力

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

MyBatis-Plus自动生成代码

目录 前言一. 什么是 MyBatis-Plus1. Mybatis-Plus 的特点2. Mybatis-Plus 结构二. MyBatis-Plus 自动生成步骤1. 数据库准备2. 环境准备(1) 创建一个空的 Spring Boot 工程(2) 导入pom依赖(3) 编辑application.yml文件(4) 在启动类加入 @MapperScan 注解3. 配置代码4. 运行三.…

Hutool SoapClient 调用使用@webservice 发布的webService接口,参数传递为空

一.发布webService接口 &#xff08;1&#xff09;接口声明 import javax.jws.WebService;WebService public interface Calculator {String add(String a, String b);int multi(int a, int b);}&#xff08;2&#xff09;实现方法 import com.maxnerva.cloud.webservice.ser…

初始mybatis

一、J D B C 编程和 ORM 模 型 1.JDBC回顾 加载驱动 &#xff1a;导入JDBC 连接数据库的 jar包&#xff0c;利用CLASS.forName 加载驱动&#xff1b; 获取连接 &#xff1a; 利用 DriverManager 获取 Connection&#xff0c;然后创建 Statement &#xff1b; 执行SQL语句 &…

算法刷题day20|回溯:39. 组合总和、40. 组合总和 II、131. 分割回文串

39. 组合总和 回溯 class Solution { private:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& candidates, int target, int sum, int startIndex) {if (sum > target) {return;}if (sum target) {result.push…

valideer,一个超强的 Python 库!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个超强的 Python 库 - valideer。 Github地址&#xff1a;https://github.com/podio/valideer 在开发应用程序时&#xff0c;数据验证是一个至关重要的环节。它确保了输入数…

【SpringBoot】5 Swagger

官网 https://swagger.io/ 介绍 Swagger 是一套基于 OpenAPI 规范构建的开源工具&#xff0c;可以帮助开发者实现设计、构建、记录、使用 Rest API。 Swagger 是一款根据 Restful 风格生成的接口开发文档&#xff0c;并且支持做测试的一款中间软件。 Swagger主要包括三部分&…

jfif怎么改成jpg?分享给大家三个小技巧!

在数字时代&#xff0c;图片是我们日常生活和工作中不可或缺的一部分。然而&#xff0c;在处理图片时&#xff0c;我们可能会遇到各种格式的问题&#xff0c;比如JFIF格式的图片在某些平台上无法直接打开或编辑。别担心&#xff0c;今天我就给大家分享三个简单实用的小技巧&…

spring自动装配读取引用jar包下的META-INF文件里的类,将其加载进spring启动容器.

总结: 0.ComponentScan默认只扫描同包、子包下的所有类, 因此扫描不到引的其他jar包依赖里的类 1.引的其他jar包依赖里的类想要被spring加载进容器, 在spring2.7之前,要把类的全类名写在自己项目包下的resources/META-INF/spring.factories下的文件中, 从spring boot2.7开…

【Linux】软连接|硬链接|当前路径(.)|上级路径(..)|硬链接不能链接目录

目录 前言 软连接 ​编辑 删除源文件 快捷应用 总结 硬链接 硬链接为何不能链接目录 为什么软连接可以 软硬链接区别 当前路径(.)和上级路径(..) ​编辑 前言 在 Linux 中&#xff0c;文件的存储位置和数据&#xff08;属性内容&#xff09;是由 inode 号来唯一标…

spring源码 bean的生命周期

问&#xff1a;谈谈对spring的理解 答&#xff1a;总分思想&#xff0c;先说对spring的总体认知&#xff0c;再说小一点的比如&#xff1a;IOC,AOP,IOC如何实现&#xff0c;生命周期&#xff0c;循环依赖等 IOC&#xff1a;控制反转 xml和注解创建对象的流程 xm文件通过IO流读…

RVC-AI声音克隆-你的声音不再是唯一

RVC是一个基于Hubert模型的AI语音转换工具&#xff0c;可以实现男女声的互换和降噪。 本文将要介绍RVC的安装和使用方法 首先感谢花儿不哭大佬带来的RVC声音克隆 花儿不哭&#xff1a; 花儿不哭的个人空间-花儿不哭个人主页-哔哩哔哩视频 (bilibili.com) RVC下载地址&#xff…

Elastic 线下 Meetup 将于 2024 年 8 月 25 号在南京举办

2024 Elastic Meetup 南京站活动&#xff0c;由 Elastic、华博集团、新智锦绣联合举办&#xff0c;现诚邀广大技术爱好者及开发者参加。 时间地点 2024 年 8 月 25 日 13:30-18:00 活动地点 南京雨花台区花神大道 17 号 华博智慧园 7 楼 智慧岛会议厅 报名地址 2024 Elasti…

稳态准直太阳光模拟器仪器光伏电池组件IV测试

太阳能模拟器电池IV测试仪、单体测试仪&#xff0c;配备匹配标准的AAA Class稳态太阳能模拟器及相关测试附件&#xff0c;可对太阳能电池片的IV性能进行测量、分级分选等&#xff1b; 介绍 AAA class太阳光模拟器整合完整的IV测量系统&#xff0c;针对各种太阳能电池的性能&a…

Redis学习[3] ——持久化

四. Redis 持久化 4.1 Redis 如何保证数据不丢失&#xff1f; 由于Redis的数据是保存在内存中&#xff0c;而内存中的数据会在Redis重启后丢失。因此&#xff0c;为了保证数据不丢失&#xff0c;Redis实现了数据持久化的机制。这个机制会将内存中的数据存储到磁盘&#xff0c…

【JVM】内存区域、垃圾回收和内存分配策略

文章目录 运行时数据区域程序计数器Java虚拟机栈栈帧Java堆方法区运行时常量池 直接内存 揭秘对象对象的内存布局对象头实例数据对齐填充 对象的访问定位 OutOfMemoryError异常Java堆溢出虚拟机栈和本地方法栈溢出方法区和运行时常量池溢出本机直接内存溢出 对象已死&#xff1…