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


Автор: Yugine 23.6.2006, 19:07
Canvas получается не на весь экран. 
Т.е. снизу и сверху остаются полосы, наверное области для добавления названия и команд. 

Как сделать GameCanvas, да вообще не только GameCanvas, но и Form, Canvas на весь экран?

подскажите пожалуйста! 

Автор: DEMOVERSION 24.6.2006, 10:24
setFullScreen for MIDP 2.0
for Form - j2mepolish 

Автор: javastic 26.6.2006, 10:52
j2mepolish, сделан на основе канвы. =) 

Автор: fare 20.7.2006, 10:51
люди так подскажите! Я пишу игру под нокию 6600 у нее разрешение 176*208, использую GameCanvas. При использование setFullScreenMode(true) у меня игра идет на полный экран, но со 144 пикселя главный герой уходит под фон. Короче начиная со 145 пикселя у меня не перересовывается экран. Можно ли это исправить? Ответьте 

Автор: Samuil 20.7.2006, 14:39
А j2mepolish его как использовать?
И еще вопросик :имеем компонент List,  при выборе какой либо строчки из компонета листа и при нажатии на кнопочку Select(на джойстике) у нас выполнялось какое либо действие?

 private list; 
 String in_out[] = {"Начало" "Конец "};
 list = new List("Лист", List.IMPLICIT, in_out, null);.

И при нажатии на центральную кнопочку вывести что либо 

Автор: 02077461 26.7.2006, 09:47
Цитата(fare @  20.7.2006,  10:51 Найти цитируемый пост)
Можно ли это исправить? Ответьте  

Приведи код. Часто нежелание поверить в возможность собственной ошибки замедляет процесс разработки. 

Автор: Samuil 26.7.2006, 11:54
fare, Возможно со 144 пикселя у тебя поверх героя накладывается фон, а ты попробй героя наложить на фон:
g.drawImage(fon,0,0,0);// Фон
g.drawImage(herro,0,0,0);// герой 

Автор: 02077461 26.7.2006, 12:10
Ты это как себе представляешь?.. до 144 методы меняються местами?.. Можно долго гадать как же ларчик открывается. Код, пожалуйста!. 

Автор: fare 26.7.2006, 21:03
Это код моего друга! Он просто короткий! Проблема такая же! Помогите уж очень хочется понять в чем здесь фишка!
Код

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


public class Denis extends GameCanvas implements Runnable
{
private TiledLayer fonpole;
private LayerManager lm;
private a chel;
private a yashik1;
private a yashik2;
boolean z=true;
boolean r=true;
int i = 20;
int y = 20;

public Denis() throws IOException
{
super(true);
setFullScreenMode(true);
fonpole=Fon();
Image i=Image.createImage("/chel.png");
chel=new a(i);
chel.setPosition(0,0);
Image y=Image.createImage("/yashik.png");
yashik1=new a(y);
yashik2=new a(y );
yashik1.setPosition(80,60);
yashik2.setPosition(80,80);
lm=new LayerManager();
lm.append(chel);
lm.append(yashik1);
lm.append(yashik2);
lm.append(fonpole);
}

public void start()
{
z=true;
Thread t = new Thread(this);
t.start();
}

public void stop() {z=false;}

public TiledLayer Fon() throws IOException
{
Image im = Image.createImage("/fon.png");
fonpole = new TiledLayer(10,10,im,20,20);
int [ ] pole = 
{
1,1,1,1,1,1,1,1,1,1,
1,2,1,2,2,1,1,2,1,2,
1,2,1,1,1,2,1,2,1,2,
1,2,2,2,2,2,1,2,1,2,
1,2,1,1,1,2,1,2,1,2,
1,2,1,1,2,1,1,2,1,2,
1,1,1,1,1,1,1,1,1,2,
1,2,2,2,2,2,2,2,2,2,
1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,
};
for(int i=0; i<pole.length;i++)
{
fonpole.setCell(i%10,i/10,pole[i]);
}
return fonpole;
}



public void run()
{

Graphics g = getGraphics();
while(z)
{
inputKey();
init(g);
try{Thread.sleep(1);}
catch(java.lang.InterruptedException zxz){};
}
}

private void inputKey()
{
int o = chel.getRefPixelX();
int p = chel.getRefPixelY();
int l = yashik1.getRefPixelX();
int k = yashik1.getRefPixelY();
int j = yashik2.getRefPixelX();
int h = yashik2.getRefPixelY();
int KeyStates = getKeyStates();
int m=0;
switch(KeyStates)
{
case RIGHT_PRESSED:
if (chel.collidesWith(yashik1,true) && l<getWidth()-20){m=1;}
if(o>=getWidth()-20 || chel.collidesWith(yashik1,true) && l>=getWidth()-20 && o>=getWidth()-50){m=2;}
if( l>=getWidth()-20 && o==l-20 && p==k) {m=3;}
switch(m)
{
case 1:
chel.moveRight(fonpole);
yashik1.moveRight(fonpole);
break;

case 2:
break;

case 3:
break;

default:
chel.moveRight(fonpole);
break;
}
break;

case LEFT_PRESSED:
if (chel.collidesWith(yashik1,true) && l>0){m=1;}
if(o<=0 || chel.collidesWith(yashik1,true) && l<=0 && o<=50){m=2;}
if( l<=0 && o==l+20 && p==k) {m=3;}
switch(m)
{
case 1:
chel.moveLeft(fonpole);
yashik1.moveLeft(fonpole);
break;

case 2:
break;

case 3:
break;

default:
chel.moveLeft(fonpole);
break;
}

break;


case UP_PRESSED:
if (chel.collidesWith(yashik1,true) && k>0){m=1;}
if(p<=0 || chel.collidesWith(yashik1,true) && k<=0 && p<=50){m=2;}
if( k<=0 && p==k+20 && o==l) {m=3;}
switch(m)
{
case 1:
chel.moveUP(fonpole);
yashik1.moveUP(fonpole);
break;

case 2:
break;

case 3:
break;

default:
chel.moveUP(fonpole);
break;
}
break;


case DOWN_PRESSED:
if (chel.collidesWith(yashik1,true) && k<getHeight()-20){m=1;}
if(p>=getHeight()-20 || chel.collidesWith(yashik1,true) && k>=getHeight()-20 && p>=getHeight()-50){m=2;}
if( k>=getHeight()-20 && p==k-20 && o==l) {m=3;}
switch(m)
{
case 1:
chel.moveDown(fonpole);
yashik1.moveDown(fonpole);
break;

case 2:
break;

case 3:
break;

default:
chel.moveDown(fonpole);
break;
}

break;
default:
chel.vozvrat();
yashik1.vozvrat();
yashik2.vozvrat();
break;
} 
}


private void init(Graphics  g)
{
g.setColor(0xffffff);
g.fillRect(0,0,176,208);
lm.paint(g,0,0);
flushGraphics();
};
}


  

Автор: 02077461 27.7.2006, 09:46
Цитата(fare @  26.7.2006,  21:03 Найти цитируемый пост)
lm=new LayerManager();
lm.append(chel);
lm.append(yashik1);
lm.append(yashik2);
lm.append(fonpole);
}

что-то я этого шага не понял.

А вообще, ты создаешь TitledLayer 10х10, с ячейкой 20x20. Т.е. интересующее разрешение 200х200 ( а нужно 176x208). Попробуй  fonpole = new TiledLayer(17,20,im,10,10);

Добавлено @ 09:47 
И все-таки, не лучше ли прорисовывать объекты самостоятельно, прямо на поле?..  

Автор: fare 27.7.2006, 22:59
Цитата(02077461 @  27.7.2006,  09:46 Найти цитируемый пост)
Попробуй  fonpole = new TiledLayer(17,20,im,10,10);

Ничего не получается! Даже если вообще фон не рисовать, все равно человечек уходит под белое поле smile. 
Кстате 144 пикселя это высота экрана если не использовать setFullScreenMode(). Может быть это как-то связано? Так как именно со 145 у меня и получается такая вот беда.
Вот собственно и беда
user posted image
user posted image 

Автор: fare 30.7.2006, 20:03
Неужели никто не может помочь? 

Автор: fare 30.7.2006, 22:15
02077461, все я решил проблему  smile ! СПАСИБО ты был прав надо прорисовывыть объекты самостоятельно,  прямо на поле! smile 
  

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