2011-09-04 68 views
2

我正在尝试在Android上制作一个简单的游戏(如Arkanoid)。位图而不是可绘制

我使用了乒乓球游戏模式中的一些元素,我在互联网上找到了它。

所以我试图改变这个类(GameObject)通过使用Bitmap而不是Drawable,但出现了一些问题。

我有一些问题:我已经来到这里一样使用它自己的分辨率场这样怎么能做出这样的事情使用Bitmap

  1. Rect对象?
  2. 是不是像.getBounds()存在Bitmap
  3. 我可以通过DrawableBitmap制作动画对象(闪烁,改变颜色和e.t.c)吗?

这里是我的代码:

package project.java.game.objects; 

import android.graphics.Canvas; 
import android.graphics.Point; 
import android.graphics.Rect; 
import android.graphics.drawable.Drawable; 

public abstract class GameObject { 

    // Directions 
    public final static int DIR_LEFT = -1; 
    public final static int DIR_RIGHT = 1; 
    public final static int DIR_NONE = 0; 
    public final static int DIR_UP = 1; 
    public final static int DIR_DOWN = -1; 


    /** Higer border of object */ 
    public int getTop() { return mPoint.y; } 

    /** Lower border */ 
    public int getBottom() { return mPoint.y + mHeight; } 

    /** Left border */ 
    public int getLeft() { return mPoint.x; } 

    /** right border */ 
    public int getRight() { return mPoint.x + mWidth; } 

    public int returnCenter(){ return mPoint.x + mWidth/2; } 

    /** Central point */ 
    public Point getCenter() { return new Point(mPoint.x + mWidth/2, mPoint.y + mHeight/2); } 

    /** Height of object */ 
    public int getHeight() { return mHeight; } 

    /** Width */ 
    public int getWidth() { return mWidth; } 

    /** @return Recatngle, which is limit objects */ 
    public Rect getRect() { 
     return mImage.getBounds(); 
    } 

    /** for intersection */ 
    public static boolean intersects(GameObject obj1, GameObject obj2) 
    { 
     return Rect.intersects(obj1.getRect(), obj2.getRect()); 
    } 


    /** for coordinates */ 
    protected Point mPoint; 

    /** Height of image */ 
    protected int mHeight; 

    /** Width */ 
    protected int mWidth; 

    /** image */ 
    private Drawable mImage; 

    /** speed */ 
    protected int mSpeed; 

    /**Life level*/ 
    protected int mLifeLvl; 

    /** 
    * Constructor 
    * @param image image which will use for object 
    */ 
    public GameObject(Drawable image) 
    { 
     mImage = image; 
     mPoint = new Point(0, 0); 
     mWidth = image.getIntrinsicWidth(); 
     mHeight = image.getIntrinsicHeight(); 
    } 

    /** point change position */ 
    protected abstract void updatePoint(); 

    /** object change position */ 
    public void update() 
    { 
     updatePoint(); 
     mImage.setBounds(mPoint.x, mPoint.y, mPoint.x + mWidth, mPoint.y + mHeight); 
    } 

    /**to draw object */ 
    public void draw(Canvas canvas) 
    { 
     mImage.draw(canvas); 
    } 
    /** set Left bound */ 
    public void setLeft(int value) { mPoint.x = value; } 

    /** set Right bound */ 
    public void setRight(int value) { mPoint.x = value - mWidth; } 

    /** set top bound */ 
    public void setTop(int value) { mPoint.y = value; } 

    /** set Lower bound */ 
    public void setBottom(int value) { mPoint.y = value - mHeight; } 

    /** center of object on OX */ 
    public void setCenterX(int value) { mPoint.x = value - mHeight/2; } 

    /** center of object on OY */ 
    public void setCenterY(int value) { mPoint.y = value - mWidth/2; } 
} 

回答

2

要获取位图的尺寸,请使用getWidth()getHeight()方法。

Bitmap b = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri); 
int width = b.getWidth(); 
int height = b.getHeight(); 

从所需尺寸的位图创建位图,使用Bitmap

Bitmap newBitmap = Bitmap.createScaledBitmap(b, width, height, false); 

您可以使用Android Animation类通过布局位图动画应用的createScaledBitmap方法。在APIDemos应用程序中可用。 (ApiDemos->视图 - > Animation-> 3D转换)

+0

谢谢,我会尝试 – MarkMark

+0

哦,顺便说一句,我不明白如何检查对象路口。我在'Rect'前使用了'Image.getBounds();'但是现在我该怎么做? – MarkMark

0

您正在寻找BitmapDrawable我想。

+0

哦thx我应该尝试看起来smth,但在JetBoy游戏的例子,只是Bitmaps无处不在,所以这就是为什么我对位图感兴趣 – MarkMark

1

哦,前几天我找对象intersetcion的解决方案srot - 此方法只是一个例子实际上还要考虑如何让你的一些对象类

private boolean checkCollision(Someobject first, Someobject second) { 
    boolean retValue = false; 
    int width = first.getBitmap().getWidth();//get bitmap from ur object then get 
    int height = first.getBitmap().getHeight();//it size 
    int firstXRangeStart = first.getCoordinates().getX();//get coordinates 
    int firstXRangeEnd = firstXRangeStart + width; 
    int firstYRangeStart = first.getCoordinates().getY(); 
    int firstYRangeEnd = firstYRangeStart + height; 
    int secondXRangeStart = second.getCoordinates().getX(); 
    int secondXRangeEnd = secondXRangeStart + width; 
    int secondYRangeStart = second.getCoordinates().getY(); 
    int secondYRangeEnd = secondYRangeStart + height; 
    if ((secondXRangeStart >= firstXRangeStart && secondXRangeStart <= firstXRangeEnd) 
     || (secondXRangeEnd >= firstXRangeStart && secondXRangeEnd <= firstXRangeEnd)) { 
     if ((secondYRangeStart >= firstYRangeStart && secondYRangeStart <= firstYRangeEnd) 
      || (secondYRangeEnd >= firstYRangeStart && secondYRangeEnd <= firstYRangeEnd)) { 
      retValue = true; 
     } 
    } 
    return retValue; 
}Bitmap