Toon posts:

[flash]2 toetsenbord inputs tegelijk.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig om een soort auto spel te maken waarbij je de auto kan besturen met de pijltjes. Het is op het principe van vooruit stuwen met ^ en rotatie met < en >.

Alleen kan ik nu niet tegelijk vooruit stuwen en draaien. Ik zelf zit aan threads te denken, maar dat vindt ik nogal complex en ik weet niet hoe dat in flash moet (kom maar met de RTFM). Mijn vraag is dus het volgende, moet ik threads gebruiken om dit voor elkaar te krijgen of kan ik ook een "andere" methode gebruiken.

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

threads...als in threads en java? ( nachtmerries van applets en sorting algoritmes komen weer opdwarrelen ;) )

nou...tis verstandig om eens naar de event structuur te kijken, movieclips kunen bijvoorbeeld listeners hebben naar events zoals keys en mouse. voor een combinatie van events zou ik een structuur bedenken van een event queue die je continue gaat monitoren en executen...

hmm interesant. :)

"You're only as good, as what you did last week."


  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

kon het niet laten ff te testen, en heb het werkend op de meest rudimentaire manier, maar daarom niet minder effectief, in het kader, waarom moeilijk doen als het ook ranzig kan:


Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
attachMovie("square", "square1", depth++);

square1.onEnterFrame = function() {
    switch(Key.getCode()) {
    case 38:
        this._y--;
        break;
    case 39:
        this._rotation++;
        break;
    case 40:
        this._y++
        break;
    case 37:
        this._rotation--;
        break;
    default:
        break
    }

    if (Key.isDown(Key.LEFT) && Key.isDown(Key.UP)) {
        this._rotation--;
        this._y--;
    } else if (Key.isDown(Key.RIGHT) && Key.isDown(Key.UP)) {
        this._rotation++;
        this._y--;  
    } else if (Key.isDown(Key.RIGHT) && Key.isDown(Key.DOWN)) {
        this._rotation++;
        this._y++;  
    } else if (Key.isDown(Key.LEFT) && Key.isDown(Key.DOWN)) {
        this._rotation--;
        this._y++;  
    }   
}


:D :)

"You're only as good, as what you did last week."


Verwijderd

Topicstarter
Nou dude je bent een legende! _/-\o_
Hij doet het super, op zich logies.

Bedankt hé!

[ Voor 82% gewijzigd door Verwijderd op 16-12-2002 20:39 ]


Verwijderd

Hoewel ik het met Oh, When? zijn ranzige approach eens ben, voor dit geval dan, aangezien er nergens omhullende code te zien is, en dit dan het makkelijkst te implementeren is, wil ik dit toch ff posten:

Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#initclip 5

/*rSys NameSpace creator*/  
if(!_global.rSys){
    _global.rSys = new Object();
}

/*
    rSys keyHandler constructor
    
    this object should be seen as an extension to the Key object

*/

rSys.keyHandler = function(){
    this.$init();
}

p = rSys.keyHandler.prototype;

/*
Public Methods Start
*/
p.setUpdateSpeed = function(fps){
    this.us = 1000/fps;
}

p.getUpdateSpeed = function(){
    return this.us; 
}

p.start = function(){
    this.interVal = setInterval(this, "$sendKeys", this.us);
}

p.stop = function(){
    clearInterval(this.interVal);
}
/*
Public Methods End
*/


/*
Listeners Start
*/
p.onKeyDown = function(){
    var k = Key.getCode();
    if(!this.keys[k]){
        this.broadcastMessage('onKeyDown_'+k);
    }
    this.Keys[k] = true;
}   

p.onKeyUp = function(){
    var k = Key.getCode();
    delete this.Keys[k];
    this.broadcastMessage('onKeyUp_'+k);
}
/*
Listeners End
*/


/*
Private Methods Start
*/
p.$init = function(){
    this.Keys = new Object();
    //Change this var (31 in this case) by your movie frame rate.
    this.setUpdateSpeed(31);
    this.start();
    
    Key.addListener(this);
    ASBroadcaster.initialize(this);
    
    
}

p.$sendKeys = function(){
    var k = this.keys;
    for(var n in k){
        this.broadcastMessage('key_'+n)     
    }
}
/*
Private Methods End
*/

delete p;
#endinitclip

(ff in een mc in de library flikkeren, linkage op gooien, en werken maar.)

Dan dit voor de test ff in de root:

Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var mc = _root.attachMovie('square_mc_id', square_1, rSys.d++);
my_KeyHandler = new rSys.keyHandler();
my_KeyHandler.addListener(mc);

mc.speed = 10;

mc.key_37 = function(){
    this._x -=this.speed;
}

mc.key_39 = function(){
    this._x +=this.speed;
}

mc.key_40 = function(){
    this._y +=this.speed;   
}

mc.key_38 = function(){
    this._y -=this.speed;   
}

mc.onKeyDown_32 = function(){
    this.speed /=2; 
}

mc.onKeyUp_32 = function(){
    this.speed *=2; 
}

delete mc;


Perfect multikeys :)

Truukje zit hem op meerdere plekken;

1. De key Repeat word afgevangen (dit kan nog wel eens stotteren opleveren).
2. Niet elk object hoeft te reageren met if reeksen op keystrokes
3. Controleerbare output van op dat moment ingedrukte toetsen.
4. pressed key events.

Misschien niet direct voor deze case bruikbaar, maar echt zeker weten handig.

edit:

voor de vragen omtrent rSys....eigen code library...dit soort dingen gebruik je veel :)

[ Voor 6% gewijzigd door Verwijderd op 16-12-2002 23:28 ]


Verwijderd

dit zou natuurlijk deel moeten uitmaken van orbSys :)

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Verwijderd schreef op 17 december 2002 @ 09:34:
dit zou natuurlijk deel moeten uitmaken van orbSys :)
offtopic:
foei! billekoek :) die orbSys.FPS is me trouwens niet meer gelukt, krijg continue undefined terug. kom ff op msn, heb wat vragen betreffende de nationale test die je voor bnn hebt ontwikkeld

"You're only as good, as what you did last week."


  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 27-08 10:08

XangadiX

trepanatie is zóó kinderachtig

tsk... patsers 8)

Stoer; Marduq


Verwijderd

Wat nou weer?
Pagina: 1