⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 microtanksprite.java

📁 坦克大战源代码
💻 JAVA
字号:
import java.io.IOException;

import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
/*
 * 我方坦克类 具有功能:我方子弹 移动方向和移动量的控制 碰到障碍物时的处理 真正的移动操作
 */
public class MicroTankSprite extends Sprite
{
    private int mDirection;
    private int mKX, mKY;
    private int x, y;
    private int delta3;
    private int mLastDelta;
    public static BulletsSprite bullets;//我方坦克的子弹,它也是一个精灵类

    private static final int[] kTransformLookup = { Sprite.TRANS_MIRROR_ROT270,
            Sprite.TRANS_MIRROR_ROT270, Sprite.TRANS_ROT90, Sprite.TRANS_NONE,
            Sprite.TRANS_ROT180 };

    public MicroTankSprite(Image image, int frameWidth, int frameHeight)
    {
        super(image, frameWidth, frameHeight);
        defineReferencePixel(frameWidth / 2, frameHeight / 2);//自定义我方坦克的参考点
        try
        {
            bullets = createBullets();// 创建了我方坦克时还创建了子弹

            bullets.setVisible(false);//开始子弹不可见
            // MicroTankCanvas.mLayerManager.append(bullets);
        }
        catch (IOException ioe)
        {
        }
        catch (Exception e)
        {
        }
    }
    // ------------------创建我方子弹---------------
    public BulletsSprite createBullets() throws IOException
    {
        Image image = Image.createImage("/bullets.png");
        return new BulletsSprite(image, 3, 3);
    }
    // ----------------移动方向和移动量的控制 此方法由此类的对象在外部类中调用------------------------
    public void forward(int delta, int delta2)
    {
        if (delta2 == 1)//delta2这一变量真妙,即可以做移动方向处理,要可以用来处理坦克的朝向
        {
            fineMove(delta, 0);
        }
        else if (delta2 == 2)
        {
            fineMove(delta, 0);
        }
        else if (delta2 == 3)
        {
            fineMove(0, delta);
        }
        else if (delta2 == 4)
        {
            fineMove(0, delta);
        }

        setTransform(kTransformLookup[delta2]);//根据外部按键时所传入的不同方向参数使坦克有相应的调头
        delta3 = delta2;// 把最后一次的方向取值赋给delta3再传到forward()方法,且让它反方向运动,

        mLastDelta = delta;// 记录下最后的移动量和方向

    }
    // ------------------碰到障碍物时的处理,注意,此方法只处理碰撞,不作碰撞的检测,也由此类的对象调用------------
    public void undo()
    {

        forward(-mLastDelta, delta3);//delta3保存有最近一次的坦克方向,-mLastDelta为反方向移动
        System.out.println("我方坦克   " + -mLastDelta + "   " + delta3);
    }
//-------------真正的移动操作,它的方向和移动量由传进来的参数决定 在本类中调用------------------
    private void fineMove(int kx, int ky)
    {

        x = getX();
        y = getY();
        x += kx;
        y += ky;
        if (y < 0 || y > 240)
        {
            y -= ky;
        }
        if (x < 0 || x > 232)
        {
            x -= kx;
        }

        setPosition(x, y);

    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -