[Vala][SDL] min händelsehantering fungerar ej...

Permalänk
Medlem

[Vala][SDL] min händelsehantering fungerar ej...

[FIXAT]
Felet låg i Kodgeneratorn, valac-0.14 fungerar inte, medans valac-0.16 gör det
[FIXAT]

Hej, har börjat att hacka påen port på ett spel som jag har gjort till vala...
men kommer inte så långt: Min händelse hantering vill inte fungera, dvs. jag kan inte stänga proggrammet via att stänga fönstret, jag är tvungen att använda xkill/killall.
Min kod:
http://paste.ubuntu.com/787131/

det är alltså private void process_events() som ite fungerar...

Main.vala:

using SDL; namespace invadersGame{ int main(string[] args){ var g = new invadersGame.Game(); g.mainLoop(); return 0; } }

kompileras med:

valac --pkg sdl --pkg sdl-gfx -X -lSDL_gfx *.vala -o invaders

(vala är designat att vara likt C# och Java, fast kompileras som C kod).

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Hedersmedlem
Skrivet av Gego:

det är alltså private void process_events() som ite fungerar...

Fungerar den inte alls, eller stänger den bara inte av sig som den skall? Skriver den ut "keydown" och liknande?

Permalänk
Medlem

nej, den körs, helatiden, har testat via att lägga dit en stdout.printf() men det är switch/case:n som inte fungerar....
altså, keydown skrivs inte ut på terminalen...
edit:
Valadocs på SDL:
http://valadoc.org/sdl/index.htm

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Hedersmedlem

Kör du init() någonstans; kanske är inte händelsesystemet aktiverat från början?

Permalänk
Medlem

lade

SDL.init(SDL.InitFlag.EVERYTHING);

i contruktorn utan att det fungerade...

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Hedersmedlem

Är det då Event.poll() som returnerar 0 eller event.type som inte matchas i switch-satsen?

Permalänk
Medlem
Skrivet av Gego:

lade

SDL.init(SDL.InitFlag.EVERYTHING);

i contruktorn utan att det fungerade...

Det ser konstigt ut att du loopar inuti event-metoden då du anropar den från huvudloopen. Även om du hade fått events skulle programmet låsa sig tills du antingen tryckte en tangent, släppte den eller avslutade.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Elgot:

Är det då Event.poll() som returnerar 0 eller event.type som inte matchas i switch-satsen?

I det exempel som finns på GNOME.org skall det vara event.poll() == 1, men hittade på github någon som använt != 0, som logiskt är samma...

Och inget av dessa varianter fungerar..
Att använda event.poll() utan någon jämförelse är inte något som valac vill vara med om.

Skickades från m.sweclockers.com

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Medlem
Skrivet av Teknocide:

Det ser konstigt ut att du loopar inuti event-metoden då du anropar den från huvudloopen. Även om du hade fått events skulle programmet låsa sig tills du antingen tryckte en tangent, släppte den eller avslutade.

Det är event.poll, inte event.WaitEvent

Skickades från m.sweclockers.com

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Hedersmedlem
Skrivet av Gego:

I det exempel som finns på GNOME.org skall det vara event.poll() == 1, men hittade på github någon som använt != 0, som logiskt samma...

Jo, men är det det testet som misslyckas eller är det något med switch-satsen?

Nu vet jag förvisso inte hur vala fungerar, men när jag testade lite gnäller kompilatorn på

Event.poll(event)

Borde det inte (om det skall se ut som c#) vara till exempel

Event.poll(out event)

?

Permalänk
Medlem
Skrivet av Gego:

Det är event.poll, inte event.WaitEvent

Skickades från m.sweclockers.com

Du kör en while-loop runt pollen vilket innebär att du väntar tills där finns ett event.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

Du kör en while-loop runt pollen vilket innebär att du väntar tills där finns ett event.

Nej, så äl det inte, While loopen körs aldrig om det inte fins enhändelse i kön.

I alla fall:
här har vi c-outputen från game.vala: http://paste.ubuntu.com/787670/

@Elgot:

Humm, såhär gör man i allafall i C/C++....

SDL_PollEvent( &event ); switch(event.type){ case SDL_QUIT: isRun = false; printf("exiting?\n"); break; case SDL_KEYDOWN: eventBool[event.key.keysym.sym] = true; break; case SDL_KEYUP: eventBool[event.key.keysym.sym] = false; break; }

skanske skall försöka mig på det...

Edit:
Nope...

private void process_events(){ Event event = Event(); Event.poll(event); switch(event.type){ case EventType.QUIT: stdout.printf("quiting...\n"); this.isRun = false; break; case EventType.KEYDOWN: stdout.printf("keydown\n"); this.eventBool[event.key.keysym.sym] = true; break; case EventType.KEYUP: stdout.printf("keyup\n"); this.eventBool[event.key.keysym.sym] = false; break; } }

hjälpte föga...

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Hedersmedlem
Skrivet av Gego:

Humm, såhär gör man i allafall i C/C++....

Jo, det är det jag menar; motsvarigheten till &-tecken i c# är "ref " eller "out " (out-variabler kommer skrivas över och måste därför inte initieras innan de skickas till funktionen). Dock tycker man att din kompilator borde klaga (det gör som sagt min).

Permalänk
Medlem
Skrivet av Elgot:

Jo, det är det jag menar; motsvarigheten till &-tecken i c# är "ref " eller "out " (out-variabler kommer skrivas över och måste därför inte initieras innan de skickas till funktionen). Dock tycker man att din kompilator borde klaga (det gör som sagt min).

$ make valac --pkg sdl --pkg sdl-gfx --pkg sdl-image --pkg sdl-ttf -X -lSDL_gfx -X -lSDL_image -X -lSDL_ttf -o bin/invaders src/*.vala src/Game.vala:68.18-68.26: error: Argument 1: Cannot pass out argument to non-output parameter Event.poll(out event); ^^^^^^^^^ Compilation failed: 1 error(s), 0 warning(s) make: *** [all] Fel 1

och

$ make valac --pkg sdl --pkg sdl-gfx --pkg sdl-image --pkg sdl-ttf -X -lSDL_gfx -X -lSDL_image -X -lSDL_ttf -o bin/invaders src/*.vala src/Game.vala:68.18-68.26: error: Argument 1: Cannot pass ref argument to non-reference parameter Event.poll(ref event); ^^^^^^^^^ Compilation failed: 1 error(s), 0 warning(s) make: *** [all] Fel 1

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Medlem

Skitsamma... Det kan vara något fel på kod generatorn eller i någon .vapi fil.....

Testade nämigen den koden som finns på gnomes hemsida och där fungerade inte häller Händelse hanteringen.

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Hedersmedlem

Spännande, såhär säger min:

u.vala:58.27-58.31: error: Argument 1: Cannot pass value to reference or output parameter while (Event.poll(event) != 0) { ^^^^^ Compilation failed: 1 error(s), 0 warning(s)

Permalänk
Medlem

Jo, det var fel på kodgeneratorn, tankade hem en ny version och hey-presto:

$ make gego@Lappis:~/bzr/invaders_vala$ make valac-0.16 --pkg sdl --pkg sdl-gfx --pkg sdl-image --pkg sdl-ttf -X -lSDL_gfx -X -lSDL_image -X -lSDL_ttf -o bin/invaders src/*.vala src/Game.vala:68.18-68.22: error: Argument 1: Cannot pass value to reference or output parameter Event.poll(event); ^^^^^ Compilation failed: 1 error(s), 0 warning(s) make: *** [all] Fel 1

Och så ändrade jag koden llite:

gego@Lappis:~/bzr/invaders_vala$ make valac-0.16 --pkg sdl --pkg sdl-gfx --pkg sdl-image --pkg sdl-ttf -X -lSDL_gfx -X -lSDL_image -X -lSDL_ttf -o bin/invaders src/*.vala gego@Lappis:~/bzr/invaders_vala$ make run ./bin/invaders Running contructor... quiting...

@Elgot:
Tack så mycket för hjälpen!

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Hedersmedlem
Skrivet av Gego:

Jo, det var fel på kodgeneratorn, tankade hem en ny version och hey-presto

Ha, intressant att fel lyckas smyga sig in i så fundamentala språkdetaljer.

Permalänk
Medlem
Skrivet av Elgot:

Ha, intressant att fel lyckas smyga sig in i så fundamentala språkdetaljer.

Kan även vaar så att .vapi filen hadde en felaktig "post" för Event.poll().... tror jag är mer troligt...
men man vet aldrig...

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Medlem
Skrivet av Gego:

Nej, så äl det inte, While loopen körs aldrig om det inte fins enhändelse i kön.

Alright då förstår jag, det är en event-kö som betas av helt enkelt.

Visa signatur

Kom-pa-TI-bilitet