2

我是一名黑莓 Java 开发人员。我正在尝试开发一个简单的老虎机逻辑。我是黑莓动画图形等的新手。那么,谁能告诉我如何设计一个简单的老虎机,按下按钮后,3 个块中的图像必须开始旋转,停止后将根据图片显示奖品。所以你能帮我一些样本或教程如何做到这一点......

编辑:我正在开发它,就像不涉及任何金钱交易的有趣应用程序一样。所以,任何黑莓开发人员请指导我如何完成任务并通过单击按钮旋转三个图像......

4

2 回答 2

3

这是一个简单的示例,但您必须自己处理装饰、平滑滚动等。

假设您有 6 张 70x70 的图像。简单的 BitmapField 扩展来绘制当前插槽图像,上半部分图像和下半部分图像:

class SlotField extends BitmapField {
    Bitmap bmp1 = Bitmap.getBitmapResource("img1.png");
    Bitmap bmp2 = Bitmap.getBitmapResource("img2.png");
    Bitmap bmp3 = Bitmap.getBitmapResource("img3.png");
    Bitmap bmp4 = Bitmap.getBitmapResource("img4.png");
    Bitmap bmp5 = Bitmap.getBitmapResource("img5.png");
    Bitmap bmp6 = Bitmap.getBitmapResource("img6.png");

    Bitmap[] bmps = new Bitmap[] { bmp1, bmp2, bmp3, bmp4, bmp5, bmp6 };

    int mPos = 0;

    public SlotField(int position) {
        mPos = position;
    }

    public int getBitmapHeight() {
        return bmp1.getHeight() * 2;
    }

    public int getBitmapWidth() {
        return bmp1.getWidth();
    }

    protected void layout(int width, int height) {
        setExtent(getBitmapWidth(), getBitmapHeight());
    }

    int getNextPos() {
        if (mPos == bmps.length - 1) {
            return 0;
        } else
            return mPos + 1;
    }

    int getPrevPos() {
        if (mPos == 0) {
            return bmps.length - 1;
        } else
            return mPos - 1;
    }

    protected void paint(Graphics g) {
        Bitmap hImg = bmps[getPrevPos()];
        Bitmap mImg = bmps[mPos];
        Bitmap lImg = bmps[getNextPos()];
        g.drawBitmap(0, 0, 70, 35, hImg, 0, 35);
        g.drawBitmap(0, 35, 70, 70, mImg, 0, 0);
        g.drawBitmap(0, 105, 70, 35, lImg, 0, 0);
    }
}

现在将这些字段放在屏幕上并使用计时器进行动画处理:

class MainScr extends MainScreen {
    SlotField slot1 = new SlotField(0);
    SlotField slot2 = new SlotField(3);
    SlotField slot3 = new SlotField(5);
    boolean running = false;

    public MainScr() {
        HorizontalFieldManager hField = new HorizontalFieldManager();
        add(hField);

        hField.add(slot1);
        hField.add(slot2);
        hField.add(slot3);

        ButtonField btnRoll = new ButtonField("Roll");
        btnRoll.setChangeListener(new FieldChangeListener() {
            public void fieldChanged(Field field, int context) {
                if (!running)
                    rollSlots();
            }
        });

        add(btnRoll);
    }

    void rollSlots() {
        Timer timer = new Timer();
        final Random rnd = new Random();
        TimerTask ttask1 = new TimerTask() {
            int cycle = 0;

            public void run() {
                slot1.mPos = slot1.getNextPos();
                invalidate();
                cycle++;
                if (cycle >= 100+rnd.nextInt(6))
                    cancel();
            }
        };

        TimerTask ttask2 = new TimerTask() {
            int cycle = 0;

            public void run() {
                slot2.mPos = slot2.getNextPos();
                invalidate();
                cycle++;
                if (cycle >= 100+rnd.nextInt(6))
                    cancel();
            }
        };

        TimerTask ttask3 = new TimerTask() {
            int cycle = 0;

            public void run() {
                slot3.mPos = slot3.getNextPos();
                invalidate();
                cycle++;
                if (cycle >= 100+rnd.nextInt(6))
                    cancel();
            }
        };

        timer.schedule(ttask1, 0, 50);
        timer.schedule(ttask2, 200, 50);
        timer.schedule(ttask3, 400, 50);
    }
}

替代文字 http://img534.imageshack.us/img534/2172/slots.jpg

对于 UI 功能,请阅读

黑莓用户界面设计 - 可定制的用户界面?

Blackberry - 字段布​​局动画

于 2010-07-12T17:28:28.207 回答
0

游戏机上的机械卷轴模拟受美国专利 7452276保护。专利网页包含其他 40 项美国和国际专利的链接,您必须先调查这些专利,然后才能开始开发您的软件。

在您获得所有不同的美国和国际专利持有人的许可以开发您的软件后,您将开发一个带有不同图像的长 .gif 条带,您可以在三个或更多位置快速向下移动。您的软件必须扭曲 .gif 条带可见部分的顶部和底部边缘,以呈现机械槽轮的外观。

于 2010-07-07T13:30:19.560 回答