[JAVA / J2ME] hoe toegang tot andere knoppen?

Pagina: 1
Acties:

  • apNia
  • Registratie: Juli 2002
  • Laatst online: 13:23

apNia

Schreeuwen en Nibbits eten!

Topicstarter
Ik probeer in een game iets te laten reageren op m'n keys. Een hele hoop keys werken normaal, dit zijn die van de joypad, en als ik m'n joypad inklik. Dit zijn de constants RIGHT_PRESSED etc
Hier is mijn functie die reageert op input:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void checkInput(){
        int keyState = getKeyStates();
        
        if(!field.isMoving()){
            if((keyState & RIGHT_PRESSED) != 0) {
                character.move(1);
            }else if((keyState & LEFT_PRESSED) != 0) {
                character.move(2);
            }else if((keyState & DOWN_PRESSED) != 0) {
                character.move(0);
            }else if((keyState & UP_PRESSED) != 0) {
                character.move(3);
            }
        }
    }
Het probleem is als ik de telefoon wil laten reageren op de knop 1 bijvoorbeeld. In de WTK geeft die als System.out.prinln(keyState) 512 af, en op m'n mobiel zelfs helemaal niks. Maar ik weet niet hoe ik wel toegang krijg naar constants die bijvoorbeeld de 1-knop representeren.
Wel is er GAME_A_PRESSED (t/m GAME_D_PRESSED), maar die verschillen per device, waardoor ik niet kan zeggen "Druk op 1 om te starten" oid..

Iemand die enig verstand heeft hoe ik toegang krijg tot deze knoppen?

[ Voor 9% gewijzigd door apNia op 01-06-2006 15:34 ]


  • Tjoekbezoer
  • Registratie: Maart 2003
  • Laatst online: 06-12-2025
In je eigen post gebruik je al RIGHT_PRESSED etc. Als je in de API kijkt zie je dat dit fields zijn van de GameCanvas class. De GameCanvas class is afgeleid van de Canvas class. Als je deze class bekijkt zie je de fields KEY_NUM1, KEY_NUM2 etc. Kijk daar even naar en je moet wel in staat zijn je probleem op te lossen denk ik.

  • apNia
  • Registratie: Juli 2002
  • Laatst online: 13:23

apNia

Schreeuwen en Nibbits eten!

Topicstarter
Dat zijn andere constants. Je hebt bijv de constant RIGHT en RIGHT_PRESSED. Dat zijn twee verschillende. Ik zou inderdaad dan willen weten hoe je KEY_NUM1 afvangt. Want daar kom ik niet uit.

edit: ik lijk veel de keyPressed() functie tegen te komen in deze vorm
code:
1
2
3
4
5
6
7
    protected void keyPressed(int key){
        System.out.println("Key pressed: "+getGameAction(key));
        switch(getGameAction(key)){
        case DOWN:
            System.out.println("Down!");
        }
    }
keyPressed() wordt alleen getriggered in m'n WTK bij bepaalde knoppen, waar bij de numberpad alleen *, 0 en # er toe lijken te doen, en nog die 2 knoppen naast m'n "joystick".
Ze geven allemaal een unieke 'key' af, maar zodra ik dit combineer in de vorm getGameAction(key) krijg ik constant bij die 1e println 0 terug. Ik snap er echt he-le-maal niks van!

[ Voor 63% gewijzigd door apNia op 01-06-2006 17:04 ]


  • Tjoekbezoer
  • Registratie: Maart 2003
  • Laatst online: 06-12-2025
Het is een beetje lastig om overzicht te krijgen, aangezien ik de rest van je code niet kan zien. Uit je tekst maak ik wel op de de class die de methode 'keyPressed' bevat wel als listener geregistreerd staat, omdat ie wel aangeroepen wordt bij een keypress blijkbaar.

Het laatste stukje code wat je geeft faalt wellicht omdat de paramater 'int key' volgens mij met flags werkt; elke bit vertegenwoordigd 1 knop op je telefoon. Maw, deze key variabele doorgeven aan getGameAction gaat wsl fout. Mss dat je iets kan doen als:

code:
1
2
3
4
if( (key & KEY_NUM1) != 0 )
{
     System.out.println( 'key_num1 pressed' );
}


of wellicht dat iets als:

code:
1
getGameAction( (key & DOWN) )


ook werkt.

Hopelijk heb je er iets aan. Jammer dat ik zo vaag moet zijn, maar ik zit op mijn werk en heb geen code/naslagwerken bij de hand die mijn geheugen weer op kunnen frissen :)

  • Tjoekbezoer
  • Registratie: Maart 2003
  • Laatst online: 06-12-2025
Goed nevermind, ik loop uit mn nek te kletsen en dingen door elkaar te halen. Ik moet eens van het bier afblijven, ik hou geen geheugen meer over. Mocht het nog nodig zijn dan zal ik in het weekend nog een post doen met wat stukken uit mijn eigen code, want ik heb het wel voor elkaar gekregen om toegang te krijgen tot alle knoppen (in de WTK en op verschillende nokia's en sony ericssons).

[ Voor 81% gewijzigd door Tjoekbezoer op 02-06-2006 11:24 ]


  • apNia
  • Registratie: Juli 2002
  • Laatst online: 13:23

apNia

Schreeuwen en Nibbits eten!

Topicstarter
Maar dan krijg je weer een verschil tussen toestellen zeker? Wat ik zo veel mogelijk wil voorkomen uiteraard. Of het een oplossing die gelijk voor alle toestellen werkt? Er zijn wel enkele zoals UP_PRESSED makkelijk te pakken te krijgen, waarschijnlijk omdat 't vrij generiek is over verschillende toestellen. Pittig verhaal ;)

  • Tjoekbezoer
  • Registratie: Maart 2003
  • Laatst online: 06-12-2025
Ik heb nog even voor je gekeken, en ik zie dat ik de functie getKeyStates() gebruik.

Even vereenvoudigd komt het op het volgende neer bij mij:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Game extends GameCanvas
{
    // Thread code, and weet ik het wat allemaal
    
    public void run(  )
    {
        int keyStates = getKeyStates(  );
        
        if( (keyStates & GameCanvas.RIGHT_PRESSED) != 0 ) {
            // move right
        }
        
        if( (keyStates & GameCanvas.LEFT_PRESSED) != 0 ) {
            // move left
        }
        
        // etc.
    }
}


Zoals je kunt zien maak ik gebruik van javax.microedition.lcdui.game.GameCanvas, en dat betekent dat je spel alleen geschikt zal zijn voor telefoons die MIDP 2.0 ondersteunen. Ik heb daar voor gekozen omdat er in MIDP 2.0 gewoon aardig wat handigheidjes zitten (heel javax.microedition.lcdui.game.* is MIDP 2.0). Als je per sé MIDP 1.0 telefoons ook toegang wilt bieden zul je een andere oplossing moeten zoeken. Ik ben bang dat dat inhoudt dat je voor elke telefoon een andere versie moet compilen (button codes hardcoded herkennen).

Hopelijk kom je weer wat verder.

  • apNia
  • Registratie: Juli 2002
  • Laatst online: 13:23

apNia

Schreeuwen en Nibbits eten!

Topicstarter
Lastig, had nooit verwacht dat het zo omslachtig zou zijn. En dan denk je dat je met Java lekker cross-compatible bent! Ik hou 't voortaan op de directionele toetsen en opties dan maar via menuutjes. Thanks voor de info Tjoekbezoer :)

Verwijderd

apNia schreef op maandag 05 juni 2006 @ 11:57:
Lastig, had nooit verwacht dat het zo omslachtig zou zijn. En dan denk je dat je met Java lekker cross-compatible bent! Ik hou 't voortaan op de directionele toetsen en opties dan maar via menuutjes. Thanks voor de info Tjoekbezoer :)
http://developers.sun.com...ty/midp/ttips/gamecanvas/

geeft eigenlijk precies de twee basismethoden om toetsenbord afhandeling te doen.

  • BdR
  • Registratie: Juni 2001
  • Laatst online: 03-09-2025

BdR

TV is gooder then books

Ik ben wel nieuwschierig, waarmee maak je die games, JBuilder of Eclipse of..?

Kan je misschien een korte opsomming geven welke software nodig is om een game te ontwikkelen voor mobieltjes? :)

mijn web games -> Impossible Snake 2 :: Impossible Snake :: Snake Slider


  • apNia
  • Registratie: Juli 2002
  • Laatst online: 13:23

apNia

Schreeuwen en Nibbits eten!

Topicstarter
Ik werk met Eclipse icm met de J2ME SDK, binnen eclipse gebruik ik de EclipseME plugin om snel te kunnen werken.

  • Tjoekbezoer
  • Registratie: Maart 2003
  • Laatst online: 06-12-2025
Ik gebruik UltraEdit als text editor, en ik gebruik Ant icm Antenna voor mijn buildscripts.

Nog even terugkomend op de cross-compatibiliteit, met MIDP 2.0 is dit een stuk verbeterd omdat je daar dus wel eenvoudig toegang hebt tot alle knoppen. Veel moderne telefoons ondersteunen MIDP 2.0 dus als het geen commercieel project is kun je denk ik wel gebruik maken van MIDP 2.0.
Pagina: 1