Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> мерцание картинки 
V
    Опции темы
Pawl
Дата 25.12.2010, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: нет
Всего: 28



Доброго времени суток!
Столкнулся с такой проблемой: хочу в своем мидлете заставить мерцать рисунок, и, понимаете, не могу  smile ! Надо мне это для того, чтобы реализовать подсказку хода (типа, куда лучше ставить крестик на доске). В интернете нашел только варианты с анимацией. Конечно, можно извратиться, и применить эти варианты, но что-то уж слишком сложно получается, по крайней мере, в моей реализации (этот бред я даже постить не буду - сам его не понимаю). Приведу пример, как я отображаю в методе paint() подсказку без мерцания:
Код

   //...
    public void paint(Graphics g) {
        // рисую желтую доску и разбиваю ее на квадратики
        g.setColor(255, 255, 0);
        g.fillRect(0, 0, boardSize, boardSize);
        g.setColor(67, 182, 228);
        for (int i = 0; i <= n; i++) {
            g.drawLine(i * cellSize, 0, i * cellSize, boardSize);
        }
        for (int j = 0; j <= n; j++) {
            g.drawLine(0, j * cellSize, boardSize, j * cellSize);
        }
         //... 

        if (hlp) {
            // ...
            // если игрок вызвал подсказку, в соответствующее место она рисуется
            g.drawImage(img, hlpX, hlpY, Graphics.VCENTER | Graphics.HCENTER);
        }

        //...
        // отображаю на доске все ранее поставленные крестики и нолики
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (board[i][j] == 2) {
                    g.drawImage(cross, i * cellSize + cellSize / 2, j * cellSize + cellSize / 2, Graphics.VCENTER | Graphics.HCENTER);
                } else if (board[i][j] == 1) {
                    g.drawImage(not, i * cellSize + cellSize / 2, j * cellSize + cellSize / 2, Graphics.VCENTER | Graphics.HCENTER);
                }
            }
        }
        //...
    }
    //...

Буду очень признателен за идеи!
Вообще, хочу сказать, не зря тут зарегистрировался: еще ни разу без помощи не оставался.
Спасибо!


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
Pawl
Дата 26.12.2010, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: нет
Всего: 28



все, сделал.
Кому интересно, вот то, чем я руководствовался:
мидлет:
Код

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class Gomokuu extends MIDlet {
    private Display display = Display.getDisplay(this);
    private Gomokuu midlet;
    MyCanvas can;

    public void startApp() {
        midlet = this;
        can = new MyCanvas(midlet);
        display.setCurrent(can);
    }

    public Display getDisplay() {
        return display;
    }

    public void exitMIDlet() {
        System.gc();
        destroyApp(true);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
        notifyDestroyed();
    }
}

канва:
Код

import javax.microedition.lcdui.*;
import java.io.IOException;

class MyCanvas extends Canvas implements CommandListener {
    private static Command cmQuit    = new Command("Quit", Command.EXIT, 1);
    private static Command cmHlp    = new Command("Help", Command.OK, 1);
    private In in = new In();
    private Thread t;
    private Image []img = new Image[2];
    private int imgIndex;
    private Gomokuu midlet;
    private boolean hlp;

    public MyCanvas(Gomokuu midlet) {
        this.midlet = midlet;
        addCommand(cmQuit);
        addCommand(cmHlp);
        try {            
            img[0] = Image.createImage("/cross.png");
            img[1] = Image.createImage("/crossMini.png");
        } catch (IOException e) {
            System.err.println("Error during image creation");
        }
        setCommandListener(this);
    }

    public void paint(Graphics g) {
        g.setColor(255, 255, 0);
        g.fillRect(0, 0, getWidth(), getHeight());
        if (hlp) {
            g.drawImage(img[imgIndex],0,0,g.TOP|g.LEFT);
        }        
    }

    public void commandAction(Command cmd, Displayable d) {
        if (cmd == cmQuit) {
            midlet.exitMIDlet();
        } else if (cmd == cmHlp) {
            hlp = true;
            if (t == null) {
                t = new Thread(in);
                try {
                    t.start();
                } catch (IllegalThreadStateException il) {}
            }            
        }
    }
    
    protected void keyPressed(int keyCode) {
        if (keyCode == KEY_NUM5) {
            hlp = false;
            t = null;
        }
    }

    private class In implements Runnable {
        public void run() {
            while(hlp) {
                imgIndex++;
                imgIndex%=2;
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e){}
                repaint();
            }
        }
    }
}

Думаю, тут все просто: в массиве 2 рисунка - большой и очень маленький. Когда они в paint'e чередуются (за это отвечает нутренний класс In), создается эффект мерцания.
Тему закрываю.


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0401 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.