📄 rolelayer.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 + -