public boolean intersects(Actor other) { int thisBounds1; if (this.image == null) { if (other.image != null) { thisBounds1 = this.gameLayer.getCellSize(); return other.containsPoint( location.x() * thisBounds1 + thisBounds1 / 2, location.y() * thisBounds1 + thisBounds1 / 2); } else { return location.x == other.location.x && location.y == other.location.y; } } else if (other.image == null) { thisBounds1 = this.gameLayer.getCellSize(); return this.containsPoint( other.location.x() * thisBounds1 + thisBounds1 / 2, other.location.y() * thisBounds1 + thisBounds1 / 2); } else { RectBox thisBounds = this.getBoundingRect(); RectBox otherBounds = other.getBoundingRect(); if (this.rotation == 0 && other.rotation == 0) { return thisBounds.intersects(otherBounds); } else if (!thisBounds.intersects(otherBounds)) { return false; } else { int[] myX = this.xs; int[] myY = this.ys; int[] otherX = other.xs; int[] otherY = other.ys; return checkOutside(myX, myY, otherX, otherY) ? false : !checkOutside(otherX, otherY, myX, myY); } } }
/** * 查找指定位置的精灵对象 * * @param x * @param y * @return */ public synchronized ISprite find(int x, int y) { ISprite[] snapshot = sprites; for (int i = snapshot.length - 1; i >= 0; i--) { ISprite child = snapshot[i]; RectBox rect = child.getCollisionBox(); if (rect != null && rect.contains(x, y)) { return child; } } return null; }
public GIFAnimation(String fileName) { this.gifDecoder = new GIFDecoder(); this.gifDecoder.read(fileName); RectBox d = gifDecoder.getFrameSize(); this.width = (int) d.getWidth(); this.height = (int) d.getHeight(); this.isVisible = true; this.animation = new Animation(); int delay; for (int i = 0; i < gifDecoder.getFrameCount(); i++) { delay = gifDecoder.getDelay(i); animation.addFrame(gifDecoder.getFrame(i).getTexture(), delay == 0 ? 100 : delay); } }
protected void setSize(int w, int h) { if (boundingRect != null) { boundingRect.setBounds(location.x, location.y, w, h); } else { boundingRect = new RectBox(location.x, location.y, w, h); } }
public int getScroll(RectBox visibleRect, int orientation, int direction) { int cellSize = this.getCellSize(); double scrollPos = 0.0D; if (orientation == 0) { if (direction < 0) { scrollPos = visibleRect.getMinX(); } else if (direction > 0) { scrollPos = visibleRect.getMaxX(); } } else if (direction < 0) { scrollPos = visibleRect.getMinY(); } else if (direction > 0) { scrollPos = visibleRect.getMaxY(); } int increment = Math.abs((int) Math.IEEEremainder(scrollPos, cellSize)); if (increment == 0) { increment = cellSize; } return increment; }
public void paintObjects(LGraphics g, int minX, int minY, int maxX, int maxY) { if (objects == null) { return; } synchronized (objects) { int paintSeq = 0; boolean isListener = false; Iterator iter = objects.iterator(); Actor thing = null; while (iter.hasNext()) { thing = (Actor) iter.next(); if (!thing.isVisible()) { continue; } isListener = (thing.actorListener != null); thing.update(elapsedTime); if (isListener) { thing.actorListener.update(elapsedTime); } RectBox rect = thing.getRectBox(); int actorX = minX + thing.getX(); int actorY = minY + thing.getY(); int actorWidth = rect.getWidth(); int actorHeight = rect.getHeight(); if (actorX + actorWidth < minX || actorX > maxX || actorY + actorHeight < minY || actorY > maxY) { continue; } LImage actorImage = thing.getImage(); if (actorImage != null) { thing.setLastPaintSeqNum(paintSeq++); boolean isBitmapFilter = ImageFilterType.NoneFilter != thing.filterType; Image bitmap = actorImage.getBufferedImage(); if (isBitmapFilter) { bitmap = factory.doFilter(bitmap, thing.filterType); } int rotation = thing.getRotation(); if (thing.alpha < 1.0) { g.setAlpha(thing.alpha); } if (rotation != 0) { double halfWidth = actorImage.getWidth() / 2; double halfHeight = actorImage.getHeight() / 2; double newWidth = actorX + halfWidth; double newHeight = actorY + halfHeight; atform.setToIdentity(); atform.scale(thing.scaleX, thing.scaleY); atform.translate(newWidth, newHeight); atform.rotate(Math.toRadians(rotation)); atform.translate(-newWidth, -newHeight); atform.translate(actorX, actorY); g.drawImage(bitmap, atform); } else { int width = (int) (actorImage.getWidth() * thing.scaleX); int height = (int) (actorImage.getHeight() * thing.scaleY); g.drawImage(bitmap, actorX, actorY, width, height); } if (isBitmapFilter) { bitmap.flush(); bitmap = null; } if (thing.alpha < 1.0) { g.setAlpha(1.0F); } } if (actorX == 0 && actorY == 0) { thing.draw(g); if (isListener) { thing.actorListener.draw(g); } } else { g.translate(actorX, actorY); thing.draw(g); if (isListener) { thing.actorListener.draw(g); } g.translate(-actorX, -actorY); } } } }