Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > JAVA Micro Edition > Программирование

Программирование Вопросы связанные с программированием в JAVA

Ответ
 
Опции темы
Старый 30.09.2011, 17:20   #1
MidletUser
AnyKey`щик
 
Регистрация: 11.08.2011
Сообщений: 8
Написано одно полезное сообщение
Просьба указать причину отстутствия анимированного спрайта на экране

В чём причина отстутствия анимированного спрайта на экране

Уважаемые J2ME-User'ы.
С учётом того, что Eclipse показывает чистый код,
реализация анимированного спрайта на экране мобильного телефона, после прочтения соответствующего материала в книгах по J2ME, результата не показала. По этой причине прошу объяснить причину в программном коде, блокирующая реализацию данной задачи.

Спрайт содержит 8 кадров, каждый по 23х28. Горизонтальное расположение.

С уважением
MidletUser


Программный код

import java.io.IOException;

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

public class MyMidlet extends MIDlet {
Display display;

MyGameCanvas mygamecanvas;
public MyMidlet() throws IOException{
display = Display.getDisplay(this);
mygamecanvas = new MyGameCanvas();
}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub

}

protected void pauseApp() {
// TODO Auto-generated method stub

}

protected void startApp() throws MIDletStateChangeException {
mygamecanvas.setFullScreenMode(true);
display.setCurrent(mygamecanvas);
// TODO Auto-generated method stub

}

}



import java.io.IOException;

import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
public class MyGameCanvas extends GameCanvas implements Runnable {
Graphics g;
boolean working;
Thread thread;
LayerManager layermanager;
Sprite mysprite;
Image image2;



public MyGameCanvas() throws IOException{


super(true);


working = true;

thread = new Thread(this);




thread.start();

}

public void run() {

try {
image2 = Image.createImage("/animated_sprite.png");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

mysprite = new Sprite ( image2, 23, 28 ) ;



mysprite.defineReferencePixel(0, 0);
mysprite.setPosition(10, 10);

layermanager = new LayerManager();
layermanager.append(mysprite);

g = getGraphics();



if(working){
layermanager.paint(g, 0, 0);
mysprite.paint(g);
mysprite.nextFrame();
flushGraphics();
repaint();


try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

// TODO Auto-generated method stub

}

public void paint(Graphics g){
g.setColor(255, 255, 255);
g.fillRect(0, 0, 240, 320);
int [] sequence = {0,1,2,3,4,5,6,7};
mysprite.setFrameSequence(sequence);
mysprite.nextFrame();





}

}

Последний раз редактировалось MidletUser, 30.09.2011 в 19:58.
(Offline)
 
Ответить с цитированием
Старый 01.10.2011, 01:20   #2
Romanzes
Разработчик
 
Аватар для Romanzes
 
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений
(для 637 пользователей)
Ответ: Просьба указать причину отстутствия анимированного спрайта на экране

Попробуй рисовать спрайт прямо в функции paint(), а не вне ее.
(Offline)
 
Ответить с цитированием
Старый 01.10.2011, 03:20   #3
MidletUser
AnyKey`щик
 
Регистрация: 11.08.2011
Сообщений: 8
Написано одно полезное сообщение
Ответ: Просьба указать причину отстутствия анимированного спрайта на экране

Уважаемый Romanzes,

воспользовавшись Вашим советом, могу сказать, что появление спрайта в анимированном виде, к результату не привело, однако часть задачи, выполнена. Спрайт виден на экране. В чём тогда дело, что данный спрайт ведёт себя так, что он виден в неанимированном виде, а должен показывать 8 кадров согласно поставленной задачи.
(Offline)
 
Ответить с цитированием
Старый 01.10.2011, 11:20   #4
Hurrit
Мастер
 
Аватар для Hurrit
 
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений
(для 2,207 пользователей)
Ответ: Просьба указать причину отстутствия анимированного спрайта на экране

лол, где ты так научился писать? тоже хотеть так писать
(Offline)
 
Ответить с цитированием
Старый 01.10.2011, 13:10   #5
Romanzes
Разработчик
 
Аватар для Romanzes
 
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений
(для 637 пользователей)
Ответ: Просьба указать причину отстутствия анимированного спрайта на экране

замени строчку
if (working) {
на
while (working) {
(Offline)
 
Ответить с цитированием
Старый 01.10.2011, 14:58   #6
MidletUser
AnyKey`щик
 
Регистрация: 11.08.2011
Сообщений: 8
Написано одно полезное сообщение
Ответ: Просьба указать причину отстутствия анимированного спрайта на экране

Уважаемый Romanzes,

после замены if на while, на экране виден только тот же самый первый кадр спрайта, однако он стал виден с многократным повтором его мерцания на экране, и это при том, что в программный код был включён метод flushGraphics(); Так что задача остаётся той же, программный код не хочет себя вести должным образом. И снова тот же вопрос, почему?
(Offline)
 
Ответить с цитированием
Старый 01.10.2011, 17:01   #7
Romanzes
Разработчик
 
Аватар для Romanzes
 
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений
(для 637 пользователей)
Ответ: Просьба указать причину отстутствия анимированного спрайта на экране

int [] sequence = {0,1,2,3,4,5,6,7};
mysprite.setFrameSequence(sequence);
Уважаемый MidletUser,
Убери вот эти 2 строчки из отрисовки и поставь их до цикла while(working).
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
NitE (01.10.2011)
Старый 01.10.2011, 19:40   #8
MidletUser
AnyKey`щик
 
Регистрация: 11.08.2011
Сообщений: 8
Написано одно полезное сообщение
Ответ: Просьба указать причину отстутствия анимированного спрайта на экране

Заработало. Но должен сказать, что мерцание осталось прежним. Да я понимаю, что 8 кадров при 10 миллисекунд остановки потока не вариант для хорошего анимированного спрайта, понимая что в 1 секунду должно быть не менее 24-25 кадров у спрайта, всё таки, ставлю вопрос мерцания данного спрайта. Поскольку был применён сетод flushGraphics() в самом потоке; Неужели Sun разработчики подобного методом flushGraphics() не предусмотрели, в случаях со спрайтами с менее 24-25 кадров в секунду. А вот относительно массива и метода установки очерёднеости воспроизведения очереди кадров, видимо следует смотреть в самом классе Thread, разработанном самими Sun разработчиками, чтобы понять, почему же массив, включенный, в сам поток, ведёт себя несколько иначе, как полагалось, не уже ли массив, внесённый в поток, начинает запись с такой скоростью, что практически не заметно, отображение остальных кадров, или что же там происходит в конце концов. Стоит ли произвести отладку массива int [] sequence, и проверить его на значение в самом цикле while(working). Вот это для меня остаётся загадкой.
(Offline)
 
Ответить с цитированием
Старый 01.10.2011, 22:48   #9
Romanzes
Разработчик
 
Аватар для Romanzes
 
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений
(для 637 пользователей)
Ответ: Просьба указать причину отстутствия анимированного спрайта на экране

Господин MidletUser, не соблаговолите ли вы быть любезным изъясняться не столь изощренно и вычурно?
Чтобы избавиться от мерцания, можно создать изображение imgBuffer размером с экран, получить его Graphics и отрисовывать все туда. А в paint() поставить строчку g.drawImage(imgBuffer, 0, 0, 0);
(Offline)
 
Ответить с цитированием
Старый 01.10.2011, 23:24   #10
baton4ik
Дэвелопер
 
Аватар для baton4ik
 
Регистрация: 21.11.2009
Адрес: Киев
Сообщений: 1,699
Написано 657 полезных сообщений
(для 1,962 пользователей)
Ответ: Просьба указать причину отстутствия анимированного спрайта на экране

Уважаемый MidletUser, вынужден заметить, что ввиду наличия немалого количества грамматических, лексических и орфографических ошибок в Ваших сообщениях, Вам было бы лучше воздержаться от подобного стиля изложения своих мыслей.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 03:08.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com