矩形碰撞

Java游戏中的碰撞检测之圆形碰撞与像素碰撞 一、碰撞检测 解题思路:可以通过比较两个对象间的距离和两个对象半径和的大小。如果它们之间的距离小于半径之和,就说明产生了碰撞。 为了得到半径,可以取高度或者宽度的一半作为半径的值。 解析图如下: 代码如下: public boolean isColliding(int ax, int ay, int aw, int ah, int bx, int by, int bw, int bh) { int ar = aw / ... 阅读详情

新建工程,RectCollision

修改HelloWorldScene.h

#ifndef __HELLOWORLD_SCENE_H__

#define __HELLOWORLD_SCENE_H__


#include "cocos2d.h"

using namespace cocos2d;

class HelloWorld : public cocos2d::CCLayer

{

public:

    // Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)

    virtual bool init();


    // there's no 'id' in cpp, so we recommend to return the class instance pointer

    static cocos2d::CCScene* scene();    

    

    // preprocessor macro for "static create()" constructor ( node() deprecated )

    CREATE_FUNC(HelloWorld);

    

    virtual void onEnter();

    virtual void onExit();

    virtual bool ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent);

    virtual void ccTouchMoved(CCTouch *pTouch,CCEvent *pEvent);

    virtual void ccTouchEnded(CCTouch *pTouch,CCEvent *pEvent);

    

    bool isRectCollision(CCRect rect1,CCRect rect2);

};


#endif // __HELLOWORLD_SCENE_H__


修改HelloWorldScene.cpp

#include "HelloWorldScene.h"

#include "SimpleAudioEngine.h"


using namespace cocos2d;

using namespace CocosDenshion;

#define collisionMacro 2

CCScene* HelloWorld::scene()

{

    // 'scene' is an autorelease object

    CCScene *scene = CCScene::create();

    

    // 'layer' is an autorelease object

    HelloWorld *layer = HelloWorld::create();


    // add layer as a child to scene

    scene->addChild(layer);


    // return the scene

    return scene;

}


// on "init" you need to initialize your instance

bool HelloWorld::init()

{

    //////////////////////////////

    // 1. super init first

    if ( !CCLayer::init() )

    {

        return false;

    }


    CCLayerColor *colorLayer=CCLayerColor::create(ccc4(255, 255, 255, 255),480,320);

    addChild(colorLayer);

    

    CCLabelTTF *pLabel=CCLabelTTF::create("~还米有碰撞", "Thonburi", 24);

    pLabel->setColor(ccc3(255, 0, 0));

    CCSize size=CCDirector::sharedDirector()->getWinSize();

    pLabel->setPosition(ccp(size.width*0.5,size.height-50));

    this->addChild(pLabel,1,900);

    

    CCSprite *sp1=CCSprite::create("rect1.png");

    sp1->setPosition(ccp(100,230));

    addChild(sp1,0,921);

    

    CCSprite *sp2=CCSprite::create("rect2.png");

    sp2->setPosition(ccp(240, 140));

    addChild(sp2,0,922);

       

    return true;

}


void HelloWorld::onEnter()

{

    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, false);

    CCLayer::onEnter();

}

void HelloWorld::onExit()

{

    CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);

    CCLayer::onExit();

}

bool HelloWorld::ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent)

{

    CCSprite *sp1=(CCSprite*) this->getChildByTag(921);

    sp1->setPosition(pTouch->getLocation());

    return true;

}

void HelloWorld::ccTouchMoved(CCTouch *pTouch,CCEvent *pEvent)

{

    CCSprite *sp1=(CCSprite*) this->getChildByTag(921);

    sp1->setPosition(pTouch->getLocation());

    

    CCSprite *sp2=(CCSprite*) this->getChildByTag(922);

    CCLabelTTF *pLabel=(CCLabelTTF*) this->getChildByTag(900);

    

    switch (collisionMacro) {

        case 1:

        {

            //利用自定义函数碰撞

            if (this->isRectCollision(CCRectMake(sp1->getPositionX(), sp1->getPositionY(), sp1->getContentSize().width, sp1->getContentSize().height), CCRectMake(sp2->getPositionX(), sp2->getPositionY(), sp2->getContentSize().width, sp2->getContentSize().height))) {

                pLabel->setString("碰撞拉!");

            }

            else

            {

                 pLabel->setString("还没有碰撞!");

            }

        }

            break;

        case 2:

        {

            //利用intersectsRect函数碰撞

            if (sp1->boundingBox().intersectsRect(sp2->boundingBox())) {

                pLabel->setString("碰撞拉!");

            }

            else

            {

                pLabel->setString("还没有碰撞!");

            }

        }

            break;

            

        default:

            break;

    }

    

}

void HelloWorld::ccTouchEnded(CCTouch *pTouch,CCEvent *pEvent)

{

    

}


bool HelloWorld::isRectCollision(CCRect rect1,CCRect rect2)

{

    float x1=rect1.origin.x;

    float y1=rect1.origin.y;

    float w1=rect1.size.width;

    float h1=rect1.size.height;

    

    float x2=rect2.origin.x;

    float y2=rect2.origin.y;

    float w2=rect2.size.width;

    float h2=rect2.size.height;

    

    if (x1+w1*0.5<x2-w2*0.5)

    {

        return false;

    }

    else if(x1-w1*0.5>x2+w2*0.5)

    {

        return false;

    }

    else if(y1+h1*0.5<y2-h2*0.5)

    {

        return false;

    }

    else if(y1-h1*0.5>y2+h2*0.5)

    {

        return false;

    }

    return true;    

}



Java游戏中的碰撞检测之矩形碰撞 我们在游戏开发中少不了会遇到各种各样的碰撞,例如飞机射击类游戏、坦克大战游戏、推箱子游戏......并且会频繁地去处理这些碰撞,这也是游戏开发中的一种基本算法。常见的碰撞算法有矩形碰撞、像素碰撞、圆形碰撞,其中矩形碰撞使用得最多。 两个矩形发生碰撞的情况有如下几种: 此外还有一种容易被忽视的碰撞情况(重叠): 第1种方法: 我们可以通过判断一个矩形的4个顶点是否在另外一个矩形的内部来完成。下面简单地创建一个Rectangle类: public class Rectangl... 阅读详情

相关推荐

矩形碰撞检测的一些方法(支持旋转)

一、坐标轴投影 依据理论: 对于两个多边形,如果存在一个轴,使得两个多边形的在该轴上的投影不重叠,则多边形之间没有碰撞发生。所有可能的轴为垂直于多边形每个边的轴。 对于矩形的参考轴比较简单,只要是两邻的两条边就可以了。 1、获取矩形的顶点坐标 首先得出矩形的四个点的坐标(可参考本博文章《根据矩形的位置和大小获取顶点位置》)。 2、计算一个矩的顶点在另一个矩边上的投影 计算两个矩形中的...

machangfengjia的专栏 3047

SDL编程入门(29)圆形碰撞检测

圆形碰撞检测 除了矩形碰撞框,圆是最常见的碰撞器形式。在这里,我们将检查两个圆以及一个圆和一个框之间的碰撞。 检查两个圆之间的碰撞很容易。 你要做的就是检查每个圆心之间的距离是否小于其半径的总和(半径是半径的倍数)。 对于框/圆碰撞,必须在碰撞框上找到最接近圆心的点。 如果该点小于圆的半径,则发生碰撞。 //一个圆结构体 struct Circle { int x, y; int r; }; SDL有一个内置的矩形结构,但我们必须自己制作一个有位置和半径的圆形结构。 //The dot t

编程之路的专栏 1290

Canvas实现动态矩形碰撞

canvas实现动态矩形碰撞

孤寒者的博客 3万+

矩形碰撞与圆形碰撞

在游戏中,经常需要进行碰撞检测的实现,例如判断前面是否有障碍以及判断子弹是否击中飞机,都是检测两个物体是否发生碰撞,然后根据检测的结果做出 不同的处理。 进行碰撞检测的物体可能有些的形状和复杂,这些需要进行组合碰撞检测,就是将复杂的物体处理成一个一个的基本形状的组合,然后分别进行不同 的检测。 下面简单介绍一下两种最基本的形状进行碰撞的时候进行的处理。 1、矩形和矩形进行碰撞 一般规则的物体碰撞...

weixin_34406796的博客 382

圆形与矩形碰撞算法分析

首先,将矩形以外的区域分为8个象限,如下图: 由于小球是不断移动的,并且矩形也在不断的移动,因此小球的坐标(x1x_1x1​,y1y_1y1​),矩形的坐标(x2x_2x2​,y2y_2y2​)为变量。其中小球的半径,矩形的宽度和高度为常量 我们整理出以下信息为: 圆形信息: 右上角坐标(x1x_1x1​,y1y_1y1​) 圆形的宽(W1W_1W1​)、 圆形的高(H1H_1H1​) 其中W1W_1W1​=H1H_1H1​,r1r_1r1​=12\tfrac{1}{2}21​W1W_1W1​ cx

啊渊的专栏 1824

IMDb影评数据集:从下载到情感分析实战指南

本文提供了IMDb影评数据集从下载、探索到情感分析建模的完整实战指南。详细介绍了数据预处理、TF-IDF向量化方法,并对比了逻辑回归、随机森林、SVM及LSTM深度学习模型在情感分析任务上的应用与效果评估,帮助读者系统掌握自然语言处理的核心流程。

weixin_29052717的博客 448

Java游戏中的圆形碰撞检测

圆形碰撞图如下: 核心思路是:判断两个圆心之间的距离是否小于两个圆的半径之和。 实现代码如下: /** * 判断两个矩形是否会发生碰撞 * * @param ax 圆形a的x坐标 * @param ay 圆形a的y坐标 * @param aw 圆形a的宽度 * @param ah 圆形a的高度 * @param bx 圆形b的x坐标 * @param by 圆形b的y坐标 * @param bw 圆

二木成林 838

【血汗泪心路历程】怎么彻底删掉Sangfor文件?怎么彻底删除easyconnect?删除sangfor后网络坏了、某些app无法正常启动怎么解决?

教程来源于网络的五湖四海+gpt解答。用到了好几个教程和方法,遂这篇总结一下。会标明出处!先上一下战绩:终于把sangfor扔进回收站里了!!!哈哈哈那一刻真的好爽。

weixin_71246590的博客 6万+

特效

新建工程,名为testEffect 修改HelloWorldScene.h #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" class HelloWorld : public cocos2d::CCLayer { publ

缥缈的云 专栏 1212

企业多部门网络隔离实战:用华为交换机VLAN+Trunk实现行政/技术部安全隔离

本文详细介绍了如何利用华为交换机的VLAN划分与Trunk链路技术,实现企业行政与技术部门间的网络逻辑隔离。通过具体的配置案例,阐述了Access与Trunk端口的工作原理、单交换机与多交换机环境下的部署策略,并延伸至三层网关部署与ACL访问控制,为企业构建安全、高效的核心网络提供实战指导。

p4q5r6s7t的博客 577

7、树莓派故障排查全攻略

本文详细介绍了树莓派在使用过程中常见的各类故障及其排查方法。内容涵盖键盘鼠标诊断、电源诊断、显示诊断、启动诊断、网络诊断以及紧急内核的使用,提供了具体的解决方法和实用建议。同时,文章总结了故障排查流程、常见故障及解决方法的汇总,并给出了注意事项和操作建议,帮助用户高效解决树莓派使用过程中的问题,确保其稳定运行。

cream的博客 323

android 矩形碰撞

矩形碰撞就是利用两个矩形之间的位置关系来进行判断,如果一个矩形的像素在另外一个矩形之中,或者之上都可以认为这两个矩形发生了碰撞。其实两个矩形不发生碰撞的情况就只有四种,其他情况就是发生碰撞了 创建实例:RectCollion, 游戏框架为SurfaceView 项目效果图:     MySurfaceView.java package com.rectCollsio

michellebaby的专栏 1086

Arcgis中的模型构建器(ModelBuilder)技术之批量图层转KML

这段时间全省各地都在开展耕地流出图斑整改恢复工作,期间或多或少都需要村委会协助摸排举证,除了举证软件外,奥维、外业精灵等软件想必大家接触得也很多。这就经常需要我们转kmz文件给业主或者摸排人员,那么有没有什么方法在arcgis下快速批量转kmz文件呢,今天就介绍一下如何在模型构建器(ModelBuilder)构建批量图层转KML的模型。

weixin_44671081的博客 1324

碰撞检测算法:点和矩形碰撞、点和圆形碰撞、矩形碰撞、圆形碰撞

点和矩形碰撞[java] view plain copy/**      *       * @param x1&nbsp...

小胖七少爷的博客 884

AI Agent开发第85课-DeepSeek-OCR 安装全指南:从 Transformers 到 vLLM,手把手教你跑通企业级 OCR

本文系统讲解 DeepSeek-OCR 的两种部署方式——基于 Hugging Face Transformers 的标准推理与基于 vLLM 的高性能加速推理。详细说明 CUDA 与 PyTorch 版本匹配、环境验证、依赖安装等关键细节,并提供可直接运行的完整代码示例。无论你是单卡调试还是高并发服务部署,都能在这里找到清晰路径。

打造全国最全的AI Agent开发知识领域的博客 2542

[ 虚拟专用网 ] IPsce 虚拟局域网(安全的IP协议的虚拟专用网)详解(二) --- 安全联盟SA

???? 博主介绍 ????‍???? 博主介绍:大家好,我是_PowerShell,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 ????点赞➕评论➕收藏 == 养成习惯(一键三连)???? ????欢迎关注????一起学习????一起讨论⭐️一起进步????文末有彩蛋 ????作者水平有限,欢迎各位大佬指点,相互学习进步! 目录 ???? 博主介绍 一、什么是安全联盟 二、协商参数两种方式:(手动、IKE) 1. 手动 2.

qq_51577576的博客 2802

圆形和矩形的碰撞检测

首先来说明一下核心思想 无非是三种状态: 1、圆心在矩形中 2、圆心在矩形外,但在其某一边的侧面 3、圆心在矩形外、不再某一边的侧面 圆心在矩形中的情况十分好处理,这里就不说了。 下面来说一下2、3情况的核心应对思路: 首先,拿到矩形的四个顶点。 算出圆心到四个顶点分别的距离。 给距离从小到大排一下序。 取其中两个最小距离的点,求出圆心到这两点之间直线(

Schrodinger 2063

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

2个矩形碰撞检测

if (x1 >= x2 && x1 >= x2 + w2)  {   return false;  //当矩形1 位于矩形2 的右侧 ;  }  else if (x1  {  return false;  //当矩形1 位于矩形2 的上方 ;  }  else if (y1 >= y2 && y1 >= y2 + h2)  {  return false;  //当矩

zhang1chao5的专栏 2237

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

碰撞检测算法:点和矩形碰撞、矩形碰撞

以下代码Lua可直接调试.点与矩形碰撞-- 点与矩形碰撞 function testPoint(x0,y0,w0,h0,x1,y1) return x1 >= x0 and x1 <= x0 + w0 and y1>=y0 and y1 < y0 + h0 end矩形碰撞-- 矩形碰撞 function testRect(x0,y0,w0,h0,x1,y1,w1,h1) return

狐狸窝 3495

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

碰撞检测算法:点和矩形碰撞、点和圆形碰撞、矩形碰撞

点和矩形碰撞 /** * * @param x1 点 * @param y1 点 * @param x2 矩形view x * @param y2 矩形view y * @param w矩形view 宽 * @param h矩形view 高 * @return */ publi...

R873112的博客 341

矩形、圆和直线之间的碰撞检测

碰撞检测一般用于游戏设计中,比如现在比较火的游戏“王者荣耀”,我们玩游戏中可以看到英雄一般走到地方防御塔的攻击范围,就会被攻击,但是程序员在下代码的时候,不能看到,只能用一段段代码表示,这是就要用到碰撞检测,还判断两个物体是否相交。 在这里我主要说三种主要的相交的判断,其他的碰撞都是在此条件下演变出来的: 在这里先写一下矩形、圆、直线的类代码: //矩形类 class rect{ private:...

weixin_43807642的博客 2541

Java游戏中的矩形碰撞检测

通常由x和y坐标以及长度和宽度来确定一个矩形,因此又可以利用这四个参数来确定是否发生了碰撞。 相交的情况下一定会发生碰撞,如下图: 还有一类特殊的相交情况,就是重叠,如下图: 所以开发的碰撞检测类如下: public class Actor { int x, y, w, h;// 分别是x和y坐标,宽度和高度,构成一个矩形 public Actor() { } public Actor(int x, int y, int w, int h) {

二木成林 2158

矩形和矩形圆的碰撞检测

// 检测圆和矩形的碰撞 矩形的宽,高,中心点x,y  圆的半径,中心点血,y     IsComputeCollision(jw, jh,jx,jy, rr, rx, ry) {         var _rx = rx - jx;         var _ry = ry - jy;         var dx = Math.min(_rx, jw * 0.5);         va...

erweimac的博客 1839

java矩形碰撞检测_旋转矩形的Java碰撞检测?

我正在编写我的第一个java游戏,到目前为止:我做了一个可以用WSAD走动的矩形,他总是面向鼠标指向的地方.此外,如果你点击,他会射击你的鼠标指向的子弹(并且子弹旋转以面向那个方向).我也制造了跟随你的敌人,他们旋转面对你的角色.我遇到的问题是我写的碰撞检测只是在旋转之前检测物体(角色,敌人和子弹)的碰撞(使用.intersects()).这意味着他们的身体的某些部分在绘制时会重叠.我一直在环顾四...

weixin_36230923的博客 358
上一篇: 多触点
下一篇: 圆形碰撞
缥缈的云
博客等级 码龄15年 94粉丝 179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值