[JAVA] RIM screens en tekenmethodes

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Op dit moment ben ik bezig met een applicatie op een BlackBerry 8900, geschreven in Java.
RIM heeft echter de Java API compleet uitgebreid / aangepast zodat je makkelijk met screens enzo kunt werken. Op een BB heb je een displaystack, waar je screens op pushed, en zodra je klaar bent met dat screen, pop je m er weer af. (Bijv een menu ofzo)

Mijn probleem is alleen dat zodra ik een screen push, er nog 1 op push, en die laatste weer pop, het scherm wit blijft. Hoe het eerste scherm er uit zag wordt dus niet onhouden. Dit wilde ik oplossen door de repaint functie aan te roepen van het eerste scherm zodra het tweede scherm gepopt wordt, maar dit blijkt lastiger dan gedacht, omdat ik niet goed weet welke functies wat doen, er zijn een stuk of 6 paint functies...

Wellicht gaat hier iets fundamenteels fout en wordt er standaard al een functie aangeroepen van het onderliggende screen, dit lijkt mij een logische werkwijze namelijk. Echter is dit nergens te vinden.

De screens zijn allemaal extended van FullScreen, en ik teken op een graphics object die ik met getGraphics() verkregen heb. Ik gebruik in het geheel geen standaard UI knoppen van de BlackBerry, zoals ook vaak bij een spelletje gedaan wordt.

Wat ik geprobeerd heb:

- Huidige screen doorgeven aan de constructor van een nieuwe screen die ik push, zodra ik in dat nieuwe screen zichzelf laat poppen, roep ik van het huidige screen de doPaint, invalidate, updateScreen enzovoort functies aan maar het scherm blijft wit.

- Een losse manager maken die elk scherm kent, en vanuit elk scherm aangeroepen kan worden, die alle pops en pushes doet. Ik had namelijk bedacht dat als ik een scherm pop en dan weer push, deze wel opnieuw getekend zou worden. Helaas maar dit werkt ook niet.

Het onderliggende probleem is denk ik dat ik het verschil tussen de verschillende hertekenfuncties niet snap, en wanneer je ze moet gebruiken. Dit wordt ook niet echt duidelijk uitgelegd, er zijn wel wat testapplicaties waarin RIM een en ander uitlegt maar echt duidelijk wordt het niet. Het gaat om de functies invalidate, invalidateScreen, updateScreen, doPaint, en handmatig paint aanroepen... voor zover ik weet. Misschien zijn er nog anderen.

Volgens mij zijn dit de verschillen:

- invalidateScreen(): zegt tegen de main loop dat je scherm een repaint nodig heeft en dit gebeurt dan later.
- invalidate: Zelfde maar dan alleen voor een deel van het scherm. (coords kan je opgeven als argument)
- updateScreen: tekent het scherm opnieuw
- doPaint: vraagt om een repaint, dit wordt later gedaan door je virtual machine.
- zelf paint aanroepen: niet de netste manier mar doet het zelfde als doPaint volgens mij...

Eigenlijk dus geen verschillen maar allemaal hetzelfde :X

Mijn vragen zijn dus:
- Wanner hoor ik welke paintfunctie te gebruiken?
- En wat moet ik wat doen als ik screens pop of push zodat ik weer beeld heb van mijn vorige scherm?

Alvast maten, ahoi! _/-\o_

[ Voor 1% gewijzigd door Verwijderd op 15-10-2009 12:04 . Reden: HAX!!1 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ter informatie,

code:
1
2
3
4
5
public void onExposed() {
    System.out.println("Hijs exposed Arie!");
    this.graphics = getGraphics();
    this.updateGame();
  }


helpt ook niet.

Maar als ik niet opnieuw this.graphics = getGraphics() run krijg ik echter wel deze error:
PAINTING -- NOT PAINTABLE