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

📄 playfield.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;

import com.golden.gamedev.util.Utility;
import java.awt.Graphics2D;
import java.io.PrintStream;
import java.util.Arrays;
import java.util.Comparator;

// Referenced classes of package com.golden.gamedev.object:
//            Background, CollisionManager, Sprite, SpriteGroup

public class PlayField
{

    private SpriteGroup a[];
    private Background b;
    private CollisionManager c[];
    private Sprite d[];
    private Comparator e;

    public PlayField(Background background)
    {
        b = background;
        SpriteGroup spritegroup;
        (spritegroup = new SpriteGroup("Extra Group")).setBackground(background);
        a = new SpriteGroup[1];
        a[0] = spritegroup;
        c = new CollisionManager[0];
        d = new Sprite[0];
    }

    public PlayField()
    {
        this(Background.getDefaultBackground());
    }

    public void add(Sprite sprite)
    {
        a[a.length - 1].add(sprite);
    }

    public SpriteGroup addGroup(SpriteGroup spritegroup)
    {
        SpriteGroup spritegroup1 = a[a.length - 1];
        a = (SpriteGroup[])Utility.cut(a, a.length - 1);
        a = (SpriteGroup[])Utility.expand(a, 2);
        spritegroup.setBackground(b);
        a[a.length - 2] = spritegroup;
        a[a.length - 1] = spritegroup1;
        return spritegroup;
    }

    public boolean removeGroup(SpriteGroup spritegroup)
    {
        for(int i = 0; i < a.length - 1; i++)
            if(a[i] == spritegroup)
            {
                a = (SpriteGroup[])Utility.cut(a, i);
                CollisionManager collisionmanager;
                if((collisionmanager = getCollisionGroup(spritegroup)) != null)
                    do
                        removeCollisionGroup(collisionmanager);
                    while((collisionmanager = getCollisionGroup(spritegroup)) != null);
                return true;
            }

        return false;
    }

    public SpriteGroup getGroup(String s)
    {
        for(int i = 0; i < a.length; i++)
            if(a[i].getName().equals(s))
                return a[i];

        return null;
    }

    public SpriteGroup[] getGroups()
    {
        return a;
    }

    public SpriteGroup getExtraGroup()
    {
        return a[a.length - 1];
    }

    public void clearPlayField()
    {
        for(int i = 0; i < a.length; i++)
            a[i].clear();

    }

    public void addCollisionGroup(SpriteGroup spritegroup, SpriteGroup spritegroup1, CollisionManager collisionmanager)
    {
        if(getCollisionGroup(spritegroup, spritegroup1) != null)
        {
            System.err.println("WARNING: " + spritegroup.getName() + " <-> " + spritegroup1.getName() + " already have a CollisionManager");
            System.err.println("CollisionGroup insertions operation continued");
        }
        c = (CollisionManager[])Utility.expand(c, 1);
        collisionmanager.setCollisionGroup(spritegroup, spritegroup1);
        c[c.length - 1] = collisionmanager;
    }

    public boolean removeCollisionGroup(CollisionManager collisionmanager)
    {
        for(int i = 0; i < c.length; i++)
            if(c[i] == collisionmanager)
            {
                c = (CollisionManager[])Utility.cut(c, i);
                return true;
            }

        return false;
    }

    public CollisionManager getCollisionGroup(SpriteGroup spritegroup, SpriteGroup spritegroup1)
    {
        for(int i = 0; i < c.length; i++)
            if(c[i].getGroup1() == spritegroup && c[i].getGroup2() == spritegroup1)
                return c[i];

        return null;
    }

    public CollisionManager getCollisionGroup(SpriteGroup spritegroup)
    {
        for(int i = 0; i < c.length; i++)
            if(c[i].getGroup1() == spritegroup || c[i].getGroup2() == spritegroup)
                return c[i];

        return null;
    }

    public CollisionManager[] getCollisionGroups()
    {
        return c;
    }

    public void update(long l)
    {
        updateSpriteGroups(l);
        updateBackground(l);
        checkCollisions();
    }

    protected void updateBackground(long l)
    {
        b.update(l);
    }

    protected void updateSpriteGroups(long l)
    {
        for(int i = 0; i < a.length; i++)
            if(a[i].isActive())
                a[i].update(l);

    }

    protected void checkCollisions()
    {
        for(int i = 0; i < c.length; i++)
            if(c[i].isActive())
                c[i].checkCollision();

    }

    public void render(Graphics2D graphics2d)
    {
        renderBackground(graphics2d);
        if(e == null)
        {
            renderSpriteGroups(graphics2d);
            return;
        } else
        {
            renderSpriteGroups(graphics2d, e);
            return;
        }
    }

    protected void renderBackground(Graphics2D graphics2d)
    {
        b.render(graphics2d);
    }

    protected void renderSpriteGroups(Graphics2D graphics2d)
    {
        for(int i = 0; i < a.length; i++)
            if(a[i].isActive())
                a[i].render(graphics2d);

    }

    protected void renderSpriteGroups(Graphics2D graphics2d, Comparator comparator)
    {
        int i = 0;
        int j;
        if((j = d.length) == 0)
        {
            d = new Sprite[100];
            j = d.length;
        }
        for(int k = 0; k < a.length; k++)
            if(a[k].isActive())
            {
                Sprite asprite[] = a[k].getSprites();
                int i1 = a[k].getSize();
                for(int j1 = 0; j1 < i1; j1++)
                    if(asprite[j1].isActive() && asprite[j1].isOnScreen())
                    {
                        if(i >= j)
                        {
                            d = (Sprite[])Utility.expand(d, 20);
                            j = d.length;
                        }
                        d[i++] = asprite[j1];
                    }

            }

        Arrays.sort(d, 0, i, comparator);
        for(int l = 0; l < i; l++)
            d[l].render(graphics2d);

    }

    public void clearCache()
    {
        d = null;
        d = new Sprite[0];
    }

    public Background getBackground()
    {
        return b;
    }

    public void setBackground(Background background)
    {
        b = background;
        if(b == null)
            b = Background.getDefaultBackground();
        for(int i = 0; i < a.length; i++)
            a[i].setBackground(background);

    }

    public Comparator getComparator()
    {
        return e;
    }

    public void setComparator(Comparator comparator)
    {
        e = comparator;
    }
}

⌨️ 快捷键说明

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