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

📄 rolelayer.java

📁 《神州》RPG游戏引擎
💻 JAVA
字号:
import java.util.*;
import javax.microedition.lcdui.game.*;


public class RoleLayer extends LayerManager
{
    Vector spriteVC;
    boolean haveChange;

    //添加角色对象
    
    public void addSprite(MySprite sprite)
    {
        if(spriteVC==null)
           spriteVC=new Vector();
        
        spriteVC.addElement(sprite);
        
        super.append(sprite);
        haveChange=false;
    }
    public void remove(int i)
    {       
    	if(spriteVC!=null)
    	{
    	MySprite mySprite=(MySprite)spriteVC.elementAt(i);
    	mySprite.stopAutoMove();
    	if(spriteVC!=null)spriteVC.removeElementAt(i);
    	super.remove(mySprite);
    	}
    }
    
    public void remove(MySprite mySprite)
    {       
    	mySprite.stopAutoMove();
    	if(spriteVC!=null)spriteVC.removeElement(mySprite);
		super.remove(mySprite);
    }
    
    
    //检测角色间是否有接触
    public boolean haveTouch()
    {
        for(int i=0;spriteVC!=null && i<spriteVC.size()-1;i++)
        {
            MySprite sprite1=(MySprite)spriteVC.elementAt(i);
            for(int j=i+1;spriteVC!=null && j<spriteVC.size();j++)
            {
                MySprite sprite2=(MySprite)spriteVC.elementAt(j);
                int x1=sprite1.getX();
                int y1=sprite1.getY();
                int w1=sprite1.getWidth();
                int h1=sprite1.getHeight();
                int x2=sprite2.getX();
                int y2=sprite2.getY();
                int w2=sprite2.getWidth();
                int h2=sprite2.getHeight();
                
                
                if(Tools.checkBoxInter(x1,y1,w1,h1,x2,y2,w2,h2))
                {
                    //System.out.println("有接触");
                    return true;
                }
            }
        }
        //System.out.println("无接触");
        return false;
    }
    
    public void sort()
    {              
        if(!haveTouch())return;
        //System.out.println("开始排序");
        
        int gap,temp,temp2;
       
        
        int n = spriteVC.size()+1; //因为不比较第0个,从1开始比较,所以数量+1        
        int[] a = new int[n];   //value
        int[] b = new int[n];   //index 对象的初始顺序        
        
        for (int i = 1; i<n; i++)
        {
            b[i] = i;   //Sptrie object 's element indexOf
        }
        //System.out.print("参与比较:");
        for (int i = 1; i<n; i++)
        {
            if(!((MySprite)spriteVC.elementAt(i-1)).isDead())
            {
            a[i] = ((MySprite)spriteVC.elementAt(i-1)).getY();
            }
            else
            {
                a[i] = -1;
            }
            //System.out.print(((MySprite)spriteVC.elementAt(i-1)).getName());
        }
        //System.out.println("");

       
        
        //-----------------希尔排序(Shell Sort)---------------------
        gap = n/2; 
        
        while (gap>0) 
        {
            for(int i=gap;i<n;i++)
            {
               int j = i - gap;
               while (j >= gap)
               {
                   if(a[j]<a[j+gap] && ((MySprite)spriteVC.elementAt(j-1)).getZIndex()==((MySprite)spriteVC.elementAt(j+gap-1)).getZIndex() || ((MySprite)spriteVC.elementAt(j-1)).getZIndex()<((MySprite)spriteVC.elementAt(j+gap-1)).getZIndex())
                   {
                      //交换数组元素,交换记录角色顺序的数组元素
                      temp = a[j];      temp2 = b[j];
                      a[j] = a[j+gap];  b[j] = b[j+gap];
                      a[j+gap] = temp;  b[j+gap] = temp2;
                      
                      j = j - gap;
                      haveChange=true;
                   }
                   else
                   {
                      j = 0;
                   }
               }
            }
            gap = gap/2;
          }            
        //-------------------------------------------------------   
        
      
        if(haveChange)
        {            
            //System.out.println("交换");
            Vector spriteVC2 = new Vector();
            
            for (int i = 1; i < n; i++)
            {
                //System.out.println(b[i]);
                spriteVC2.addElement((MySprite)spriteVC.elementAt(b[i]-1));
                //System.out.println(b[i]);
            }
            
            spriteVC = spriteVC2;
            for(int i=super.getSize()-1;i>=0;i--)
            {
                super.remove(super.getLayerAt(i));
            }
            for(int i=0;i<spriteVC.size();i++)
            {
                super.append((MySprite)spriteVC.elementAt(i));
                //System.out.print(((MySprite)spriteVC.elementAt(i)).getName()+":"+((MySprite)spriteVC.elementAt(i)).getY()+",");
            }
            //System.out.println("");
        }else
        {
            //System.out.println("排序不变");        
        }
        haveChange=false;        
    }
    
}

⌨️ 快捷键说明

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