group.java
来自「Sony Ericsson手机上的Facebook客户端全套代码」· Java 代码 · 共 239 行
JAVA
239 行
// 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)
// Source File Name: Group.java
package se.southend.drops.scene;
import java.util.Vector;
import javax.microedition.lcdui.Graphics;
// Referenced classes of package se.southend.drops.scene:
// Node, Sprite, Camera
public class Group extends Node
{
public Group()
{
children = new Vector(3);
}
public Node find(String id)
{
if(super.find(id) != null)
return this;
for(int i = 0; i < children.size(); i++)
{
Node child = (Node)children.elementAt(i);
Node found = child.find(id);
if(found != null)
return found;
}
return null;
}
public void add(Node node)
{
children.addElement(node);
node.setParent(this);
node.setParentPosition(getX(), getY(), getZ());
sizeUpdated = true;
}
public void add(Node node, String id)
{
node.setId(id);
add(node);
}
public void remove(Node node)
{
children.removeElement(node);
sizeUpdated = true;
}
public void remove(int node)
{
children.removeElementAt(node);
sizeUpdated = true;
}
public void empty()
{
children.removeAllElements();
sizeUpdated = true;
}
public Node getChild(int index)
{
return (Node)children.elementAt(index);
}
public int getChildCount()
{
return children.size();
}
public Vector getChildren()
{
return children;
}
public final void setWorldPosition(int x, int y)
{
super.setWorldPosition(x, y);
updateChildren();
}
public final void setLocalPosition(int x, int y)
{
super.setLocalPosition(x, y);
updateChildren();
}
public final void setWorldPosition(int x, int y, int z)
{
super.setWorldPosition(x, y, z);
updateChildren();
}
public final void setLocalPosition(int x, int y, int z)
{
super.setLocalPosition(x, y, z);
updateChildren();
}
public final void setParentPosition(int x, int y, int z)
{
super.setParentPosition(x, y, z);
updateChildren();
}
public final void adjustToCamera(Camera camera)
{
for(int i = 0; i < children.size(); i++)
{
Node node = (Node)children.elementAt(i);
if(node.isVisible())
node.adjustToCamera(camera);
}
}
public Vector getAllDescendants()
{
Vector children = new Vector();
addToDescendants(this, children);
return children;
}
public int getWidth()
{
int xMin = 0x7fffffff;
int xMax = 0x80000000;
Vector children = getAllDescendants();
int nbrChildren = children.size();
for(int i = 0; i < nbrChildren; i++)
{
Node node = (Node)children.elementAt(i);
if(!(node instanceof Sprite))
continue;
Sprite sprite = (Sprite)node;
int xSpr = (sprite.getX() >> 8) - sprite.getAnchorX();
int wSpr = sprite.getWidth();
if(xSpr < xMin)
xMin = xSpr;
if(xSpr + wSpr > xMax)
xMax = xSpr + wSpr;
}
return xMax <= xMin ? 0 : xMax - xMin;
}
public int getHeight()
{
int yMin = 0x7fffffff;
int yMax = 0x80000000;
Vector children = getAllDescendants();
int nbrChildren = children.size();
for(int i = 0; i < nbrChildren; i++)
{
Node node = (Node)children.elementAt(i);
if(!node.isVisible() || !(node instanceof Sprite))
continue;
Sprite sprite = (Sprite)node;
int ySpr = (sprite.getY() >> 8) - sprite.getAnchorY();
int hSpr = sprite.getHeight();
if(ySpr < yMin)
yMin = ySpr;
if(ySpr + hSpr > yMax)
yMax = ySpr + hSpr;
}
return yMax <= yMin ? 0 : yMax - yMin;
}
public void paint(Graphics graphics)
{
if(sizeUpdated || sorted == null)
{
sizeUpdated = false;
sorted = new Node[children.size()];
children.copyInto(sorted);
}
sort(sorted);
int nbrNodes = sorted.length;
for(int i = 0; i < nbrNodes; i++)
{
Node node = sorted[i];
if(node.isVisible())
node.paint(graphics);
}
}
private final void updateChildren()
{
for(int i = 0; i < children.size(); i++)
{
Node node = (Node)children.elementAt(i);
node.setParentPosition(getX(), getY(), getZ());
}
}
private static void addToDescendants(Group group, Vector children)
{
for(int i = 0; i < group.getChildCount(); i++)
{
Node child = group.getChild(i);
children.addElement(child);
if(child instanceof Group)
addToDescendants((Group)child, children);
}
}
static void sort(Node sorted[])
{
int nbrNodes = sorted.length;
for(int current = 1; current < nbrNodes; current++)
{
Node node = sorted[current];
int zNode = node.getZ();
int compare;
for(compare = current - 1; compare >= 0 && sorted[compare].getZ() > zNode; compare--)
sorted[compare + 1] = sorted[compare];
sorted[compare + 1] = node;
}
}
boolean sizeUpdated;
Vector children;
Node sorted[];
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?