⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 precisecollisiongroup.java

📁 一个java的免费游戏引擎,里面有文档,和例子
💻 JAVA
字号:
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi 

package com.golden.gamedev.object.collision;

import com.golden.gamedev.object.CollisionManager;
import com.golden.gamedev.object.Sprite;

// Referenced classes of package com.golden.gamedev.object.collision:
//            CollisionGroup, CollisionRect, CollisionShape

public abstract class PreciseCollisionGroup extends CollisionGroup
{

    private final TrackRect a = new TrackRect();
    private final TrackRect b = new TrackRect();

    public PreciseCollisionGroup()
    {
    }

    public boolean isCollide(Sprite sprite, Sprite sprite1, CollisionShape collisionshape, CollisionShape collisionshape1)
    {
        if(collisionshape.intersects(collisionshape1))
        {
            this.sprite1 = sprite;
            sprite2 = sprite1;
            collisionSide = 0;
            double d = sprite.getOldX();
            double d1 = sprite.getOldY();
            double d2 = sprite1.getOldX();
            double d3 = sprite1.getOldY();
            double d4 = sprite.getX() - d;
            double d5 = sprite.getY() - d1;
            double d6 = sprite1.getX() - d2;
            double d7 = sprite1.getY() - d3;
            a.setBounds(collisionshape.getX(), collisionshape.getY(), collisionshape.getWidth(), collisionshape.getHeight());
            b.setBounds(collisionshape1.getX(), collisionshape1.getY(), collisionshape1.getWidth(), collisionshape1.getHeight());
            a.move(-d4, -d5);
            b.move(-d6, -d7);
            double d8 = Math.max(Math.max(Math.abs(d4), Math.abs(d5)), Math.max(Math.abs(d6), Math.abs(d7)));
            a.setCollisionStep(d4 / d8, d5 / d8);
            b.setCollisionStep(d6 / d8, d7 / d8);
            d8++;
            for(int i = 0; (double)i <= d8; i++)
            {
                if(a.intersects(b))
                {
                    boolean flag = true;
                    if(pixelPerfectCollision && !CollisionManager.isPixelCollide(a.getX(), a.getY(), sprite.getImage(), b.getX(), b.getY(), sprite1.getImage()))
                        flag = false;
                    if(flag)
                    {
                        a.prevTrack();
                        b.prevTrack();
                        collisionX1 = d + a.dx;
                        collisionY1 = d1 + a.dy;
                        collisionX2 = d2 + b.dx;
                        collisionY2 = d3 + b.dy;
                        CollisionRect collisionrect;
                        if(collisionY1 + (double)a.height <= collisionY2)
                            collisionSide = 8;
                        else
                        if(collisionY2 + (double)b.height <= collisionY1)
                            collisionSide = 4;
                        else
                        if(collisionX1 + (double)a.width <= collisionX2)
                            collisionSide = 2;
                        else
                        if(collisionX2 + (double)b.width <= collisionX1)
                            collisionSide = 1;
                        else
                        if((collisionrect = CollisionManager.getIntersectionRect(a.getX(), a.getY(), a.getWidth(), a.getHeight(), b.getX(), b.getY(), b.getWidth(), b.getHeight())).width <= collisionrect.height)
                        {
                            if(Math.abs(d4) >= Math.abs(d6))
                                collisionX1 += d4 <= 0.0D ? collisionrect.width : -collisionrect.width;
                            else
                                collisionX2 += d6 <= 0.0D ? collisionrect.width : -collisionrect.width;
                            collisionSide = collisionX1 >= collisionX2 ? 1 : 2;
                        } else
                        {
                            if(Math.abs(d5) >= Math.abs(d7))
                                collisionY1 += d5 <= 0.0D ? collisionrect.height : -collisionrect.height;
                            else
                                collisionY2 += d7 <= 0.0D ? collisionrect.height : -collisionrect.height;
                            collisionSide = collisionY1 >= collisionY2 ? 4 : 8;
                        }
                        return true;
                    }
                }
                a.nextTrack();
                b.nextTrack();
            }

            return false;
        } else
        {
            return false;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -