Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java ME (J2ME) > появление черного экрана


Автор: ИванМ 2.2.2009, 15:07
Почему-то у меня в приложении иногда все обрывается и на несколько милисекунд появляется черный экран. И в эмуляторе WTK и в самом телефоне. 
Вроде исключений и ошибок в этот момент не происходит.
Что с этим делать?
Я пользуюсь GameCanvas, вывожу все с помощью draw*.

Автор: dive 2.2.2009, 15:09
paint блокируется скорее всего или осуществляется выход по условию из paint после очистки экрана.
вы экран черным цветом очищаете?

Автор: ИванМ 2.2.2009, 15:16
Я paint'ом не пользуюсь. Делаю так:
Graphics g=getGraphic();
draw*;
...
flushGraphics();
Это не правильно?
Экран очищаю с помощью заливки фонового рисунка.

Автор: dive 2.2.2009, 15:21
правильно, я run имел ввиду. не блокируется он случаем?

вот тут основы http://developers.sun.com/mobility/midp/ttips/gamecanvas/index.html
тут тоже самое только на русском http://www.mobilab.ru/articles/33/

т.е. экран заливается картинкой? а не черным фоном?
может быть покажете основной игровой цикл?

Автор: ИванМ 2.2.2009, 15:28
У меня игра типа стратегии. Поэтому run'ом не пользуюсь. Просто реагирую на нажатие кнопки.
Вот, для примера класс меню. Он тоже бывает глючит в момент нажатия кнопок:

Код

import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;

public class Menu extends GameCanvas
{
    public static Menu canvas;
    
    private static Image imgBG=null; 
    
    private MyCanvas backCan;
    
    private String[] Strs;
    
    private int selected=0, count=0;
    
    Text text=new Text();
    
    public Menu(MyCanvas can, String[] strs) throws Exception 
    {        

        super(false);

        canvas=this;
        backCan=can;
        
        if(imgBG==null)
            imgBG=Image.createImage("/menu_bg.png");
        
        setFullScreenMode(true);
        
        count=strs.length;
        Strs=strs;
        
        Graphics g=getGraphics();
        backCan.draw(g);
        draw(g);
        flushGraphics();
        
    }
    
    public void draw(Graphics g)
    {
        for(int j=0;j<2;j++)
            g.drawImage(imgBG, (getWidth()-imgBG.getWidth())/2, j*imgBG.getHeight()+(getHeight()-imgBG.getHeight()*2)/2, Graphics.TOP|Graphics.LEFT);
        
        g.setColor(75, 20, 20);
        g.fillRect((getWidth()-Strs[selected].length()*7)/2-5, selected*17+(getHeight()-Strs.length*17)/2,Strs[selected].length()*7+10, 17);
        
        for(int i=0;i<Strs.length;i++)
            Text.draw(g, -1, Strs[i], (getWidth()-Strs[i].length()*7)/2, i*17+(getHeight()-Strs.length*17)/2);
        
    }

    protected void keyPressed(int keyCode)
    {
        if(keyCode==KEY_NUM8 || keyCode==MainCanvas.KEY_DOWN)
        {
            selected++;
            if(selected>count-1)
                selected=0;
        }
        else if(keyCode==KEY_NUM2 || keyCode==MainCanvas.KEY_UP)
        {
            selected--;
            if(selected<0)
                selected=count-1;
        }
        else if(keyCode==KEY_NUM5 || keyCode==MainCanvas.KEY_SELECT)
        {
            backCan.command(Strs[selected]);
            backCan.setCurrent();
        }
        else if(keyCode==MainCanvas.KEY_LMAIN || keyCode==MainCanvas.KEY_RMAIN)
        {
            backCan.setCurrent();
        }
        
        Graphics g=getGraphics();        
        draw(g);
        flushGraphics((getWidth()-imgBG.getWidth())/2, (getHeight()-imgBG.getHeight()*2)/2, imgBG.getWidth(), imgBG.getHeight()*2);
    }
    
    
}

Автор: dive 2.2.2009, 15:46
run нужен, а точнее жизненно необходим.
всмотритесь внимательнее тут http://developers.sun.com/mobility/midp/articles/game/ , там правильно организован основной игровой цикл.
как впрочем и здесь, в разделе GameCanvas http://www3.ntu.edu.sg/home/ehchua/programming/howto/JavaME_HowTo.html

Автор: ИванМ 2.2.2009, 16:18
Спасибо, не знал, что run обязательно должен присутствовать. Добавил, буду смотреть, появится ли теперь черный экран.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)