示例#1
0
 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);
     }
   }
 }
示例#2
0
 /**
  * 查找指定位置的精灵对象
  *
  * @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;
 }
示例#3
0
 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);
   }
 }
示例#4
0
 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);
   }
 }
示例#5
0
 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;
 }
示例#6
0
 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);
       }
     }
   }
 }