gpt4 book ai didi

java - 位图而不是 Drawable

转载 作者:搜寻专家 更新时间:2023-11-01 09:12:28 26 4
gpt4 key购买 nike

我正在尝试在 Android 上制作一个简单的游戏(例如打砖 block )。

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

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

我有一些问题:

  1. 我在这里得到的 Rect 对象像字段一样使用它自己的分辨率,所以如何使用 Bitmap 制作这样的东西?
  2. Bitmap 是否存在类似.getBounds() 的东西?
  3. 我可以使用 DrawableBitmap 制作动画对象(闪烁、改变颜色等)吗?

这是我的代码:

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; }
}

最佳答案

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

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

要从所需尺寸的位图创建位图,请使用 Bitmap 类的 createScaledBitmap 方法

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

您可以使用 Android Animation 类通过布局在位图上应用动画。在 APIDemos 应用程序中可用。 (ApiDemos->Views->Animation->3D Transition)

关于java - 位图而不是 Drawable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7301193/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com