[AS3] Dubbele waardes in array (Mogelijk Double associative)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • topaj
  • Registratie: April 2008
  • Laatst online: 11-09 15:56
Beste Tweakers,

Ik heb even een kort vraagje over een bepaald stukje code in actionscript 3 wat ik niet snap,
ik wil graag dit spel om veel van te leren porten naar OpenGL, en evt. Direct X en Java.

Nu heb ik in dit stuk code:
Flash ActionScript 3:
1
*snip 544 regels code weggepoetst*


Zie je ergens BADDIES met 2x [][] (bijv. BADDIES[loc1][2])
Nu heb ik het een en ander gelezen over 'Double associative arrays',
maar ik zie in deze code geen 'definitie' van de array, alleen maar :
- public var BADDIES:Array;
- en this.BADDIES = new Array();
- en this.BADDIES.push([loc1, loc2, loc3, loc4, loc7, loc5, loc6, loc8, loc9]);

Iemand die het voor mij uit zou willen leggen?
Ik kom er zelf niet uit :?

Alvast dank

[ Voor 102% gewijzigd door topaj op 16-02-2010 21:32 ]

Groeten


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Baddies is een zogenaamde jagged array, net zoals je die bijvoorbeeld in java hebt. Het is dus een array bestaande uit arrays. Op regel 445 wordt steeds een array gemaakt die aan de array BADDIES wordt toegevoegd:
JavaScript:
445
            this.BADDIES.push([loc1, loc2, loc3, loc4, loc7, loc5, loc6, loc8, loc9]);

offtopic:
Je post echt belachelijk veel onnodige code. Graag beperken. :)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • topaj
  • Registratie: April 2008
  • Laatst online: 11-09 15:56
Dat ik eroverheen ben gelezen komt omdat in de meeste programmeertalen push een verschuiving is van dingen, dus bijv. voorinvoegen of ergens tussenin voegen.

Groeten


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Koekoek 8)7
Doe me een lol en beperk volgende keer je post tot enkel de relevante(!) code. 544 regels code dumpen is nou niet echt de bedoeling hier :X

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • topaj
  • Registratie: April 2008
  • Laatst online: 11-09 15:56
Sorry, maar ik wist echt niet waar het zou kunnen zitten, maar ik zal het wel ff inperke.
EDIT : Is al voor me gedaan ;)

[ Voor 15% gewijzigd door topaj op 16-02-2010 21:31 ]

Groeten


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
topaj schreef op dinsdag 16 februari 2010 @ 21:29:
Dat ik eroverheen ben gelezen komt omdat in de meeste programmeertalen push een verschuiving is van dingen, dus bijv. voorinvoegen of ergens tussenin voegen.
Euh, nee. Push is in de meeste talen gewoon het toevoegen aan het eind/top een collectie.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • topaj
  • Registratie: April 2008
  • Laatst online: 11-09 15:56
Ik probeer nu de code in Cocoa met Quartz te schrijven, maar daar heb je eigenlijks geen jagged arrays,
maar NSMutableArrays komen aardig in de buurt.
Maar zoals ik het nu begrijp is het een soort 'array' in een array?
Of begrijp ik dat nu verkeerd?

Groeten


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
topaj schreef op dinsdag 16 februari 2010 @ 21:53:
Maar zoals ik het nu begrijp is het een soort 'array' in een array?
Ja. En ja.

[ Voor 26% gewijzigd door RobIII op 16-02-2010 22:01 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • topaj
  • Registratie: April 2008
  • Laatst online: 11-09 15:56
Volgens mij kun je dit vergelijken met een sql tabel.
Ben alleen hard aan het nadenken hoe ik dit aan zal aanpakken in Cocoa :)
Wordt een hele uitdaging, en hoop er veel van te leren

EDIT:
Gevonden :P
http://www.cocoabuilder.c...wo-dimensional-array.html

code:
1
2
3
NSMutableArray *first = [[NSMutableArray alloc] initWithCapacity: 5];
[first insertObject: [NSArray arrayWithObjects: @"a", @"b", @"c", @"d", @"e", nil] atIndex: 0];
[first insertObject: [NSArray arrayWithObjects: @"f", @"g", @"h", @"i", @"j", nil] atIndex: 1];

[ Voor 55% gewijzigd door topaj op 17-02-2010 13:32 ]

Groeten


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
topaj schreef op dinsdag 16 februari 2010 @ 22:23:
Volgens mij kun je dit vergelijken met een sql tabel.
Nee, want die heeft een fixed size (elke rij (record) heeft hetzelfde aantal velden).
De term 'jagged' komt van het feit dat als je de elementen onder elkaar zet je juist een 'jagged' (onregelmatige) rechterkant krijgt:

Afbeeldingslocatie: http://tweakers.net/ext/f/WAmaxYLz7wNXDC6t7EOXOQVV/full.gif

Feitelijk zie je hier in dit voorbeeld een array met 4 elementen (elke regel is 1 element). En elk element bevat een array van een variabel aantal elementen (de letters).
Die ziet er dan zo uit:

code:
1
2
3
4
5
6
MyJaggedArray = Array(
  Array("J","A","G","G","E","D"),                //6 elementen in 1 array
  Array("A","R","R","A","Y","S"),                //6 elementen in 1 array
  Array("A","R","E"),                            //3 elementen in 1 array
  Array("C","O","N","F","U","S","I","N","G")     //9 elementen in 1 array
)

MyJaggedArray is dus nu een array met 4 elementen; elk element is een array.

(Overigens een wat lullige tekst in de array; zo 'confusing' zijn ze niet, maar dat was 't beste wat ik zo snel even kon vinden zonder zelf photoshop aan te moeten zwengelen :+ )

Het is jammer dat je zoveel code postte, want, nu ik even in de diff heb gekeken, lijk je helemaal geen jagged array nodig te hebben maar een gewone tweedimensionale array (ook wel "matrix"). Dan heb je dus een fixed aantal elementen per 'rij' en dan kun je het inderdaad wél met een Sql tabel vergelijken (of beter dus: een matrix). Maar door de hoeveelheid code zie ik niet zo snel of dat wel echt 't geval is en moet ik even op pedorus afgaan.
offtopic:
Soooow, welk genie heeft daar de UI ontworpen en het interaction design gedaan? :X

[ Voor 76% gewijzigd door RobIII op 16-02-2010 23:04 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • topaj
  • Registratie: April 2008
  • Laatst online: 11-09 15:56
Ok, die arrays zijn nu vrij duidelijk.
Wat ik alleen nog niet snap, is hoe er een item in de array wordt gestopt in AS3, met dank aan pedorus weet ik dat Push de array jagged maakt.
Alleen, in de code zie ik alleen niet waar de item in de array wordt gestopt.
Ik weet vrij zeker dat het de functie createBADDIE is:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        public function createBADDY():void
        {
            var loc1:*=Math.random() * stage.stageWidth;
            var loc2:*=Math.random() * stage.stageHeight;
            var loc3:*=0;
            var loc4:*=0;
            var loc5:*=Math.random() * 40 - 20;
            var loc6:*=Math.random() * 40 - 20;
            var loc7:*=Math.random() * 16777215;
            this.g.lineStyle(2, loc7, 1);
            this.g.drawCircle(loc1, loc2, 20);
            var loc8:*=Math.random() * 2;
            var loc9:*=Math.random() * 70;
            this.BADDIES.push([loc1, loc2, loc3, loc4, loc7, loc5, loc6, loc8, loc9]);
            return;
        }


Of begrijp ik dat nu verkeerd, en wordt er met push een array in de BADDIES array gestopt?

Offtopic:
De auteur wist zeker niet dat commentaar erg belangrijk is ;)

[ Voor 8% gewijzigd door topaj op 17-02-2010 13:36 ]

Groeten


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
topaj schreef op woensdag 17 februari 2010 @ 13:34:
Ok, die arrays zijn nu vrij duidelijk.
Wat ik alleen nog niet snap, is hoe er een item in de array wordt gestopt in AS3, met dank aan pedorus weet ik dat Push de array jagged maakt.
Alleen, in de code zie ik alleen niet waar de item in de array wordt gestopt.
Ik weet vrij zeker dat het de functie createBADDIE is:
Of begrijp ik dat nu verkeerd, en wordt er met push een array in de BADDIES array gestopt?
Denk nou eens alle irrelevante regels uit die code weg; ik neem aan dat je zelf ook wel ziet dat drawCircle, Math.Random() etc. niets doen met je array. Wat blijft er dan nog over?
JavaScript:
1
2
3
4
5
        public function createBADDY():void
        {
            /* poof, weg */
            this.BADDIES.push([loc1, loc2, loc3, loc4, loc7, loc5, loc6, loc8, loc9]);
        }

Wat valt je daar op? Ik zie daar () en [] haken. De ()-haken vanwege de method call, die altijd tussen () staat. En [] is een array-notatie, waarvan ik hoop dat je dat inmiddels wel weet. Je stopt nu dus in de BADDIES array 1 element (welke toevallig van 't type array is met daarin 9 elementen). Zo moeilijk is dat toch niet? Of je nou een array pushed of een integer of een ander object boeit niet (in dit geval). Je voegt gewoon iets toe aan een array.
topaj schreef op woensdag 17 februari 2010 @ 13:34:

Offtopic:
De auteur wist zeker niet dat commentaar erg belangrijk is ;)
De bedoeling van commentaar in code is niet dat je er van leert programmeren; commentaar als:
JavaScript:
1
//hier wordt een element aan de array toegevoegd

is dan ook redelijk zinloos. In commentaar leg je de werking (het waarom) uit van code, niet het hoe. Dat staat namelijk meteen erna in de vorm van code ;)

[ Voor 21% gewijzigd door RobIII op 17-02-2010 13:56 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • topaj
  • Registratie: April 2008
  • Laatst online: 11-09 15:56
Wat valt je daar op? Ik zie daar () en [] haken. Je stopt nu dus in de BADDIES array 1 element (1 array) met daarin 9 elementen. Zo moeilijk is dat toch niet? Of je nou een array pushed of een integer of een ander object boeit niet (in dit geval). Je voegt gewoon iets toe aan een array.
Dat had ik dus ook al bedacht, zie vorige post.

Maar omdat ik nooit met actionscript geprogrammeerd heb vraag ik het maar even, omdat ik er toch van wil leren en het probeer te snappen wat er gebeurt ;)

Commentaar gebruik ik meestal om aan te duiden wat wat is zodat ik later meteen verder kan werken omdat ik weet wat alles is. Het originele script telt 546 regels code, en dan is het toch handig dat je er even bij zet wat alles is. BADDIES is ook niet een logische naam ;)

Groeten


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
topaj schreef op woensdag 17 februari 2010 @ 13:57:
Dat had ik dus ook al bedacht, zie vorige post.
topaj schreef op woensdag 17 februari 2010 @ 13:57:
en het probeer te snappen wat er gebeurt ;)
Dan snap je het toch :?
topaj schreef op woensdag 17 februari 2010 @ 13:57:
Het originele script telt 546 regels code
Boeiend. Al was het 10 of 100x zo groot. Maar als je dingen wil leren/experimenteren/zeker weten dan maak je toch even, voor je overzicht, een leeg project met daarin een experimentje van 3 regels code om even te staven of je gedachte/redenatie klopt :? Dat is sneller gedaan dan een post op GoT maken en als bijkomend voordeel heb je meteen dat je even kunt stoeien met die code en er aan kunt 'voelen' / 'ruiken'.
topaj schreef op woensdag 17 februari 2010 @ 13:57:
en dan is het toch handig dat je er even bij zet wat alles is
Nogmaals; goed commentaar beschrijft niet de code die er onder (of in de buurt) staat in de zin van:
JavaScript:
1
2
//hier tellen we 1 bij a op
a = a + 1

Dat je 1 bij a optelt zie ik ook wel. Maar waarom doe je dat? Dat haal ik er niet uit. Goed commentaar beschrijft het waarom:
JavaScript:
1
2
//We skippen dit element uit de array omdat het product niet voldoet aan voorwaarde_x
a = a + 1
topaj schreef op woensdag 17 februari 2010 @ 13:57:
BADDIES is ook niet een logische naam ;)
:? Als het om een spelletje gaat en het gaat over de tegenspelers dan is het een heel logische naam (of ENEMIES of whatever). Als het gaat om een factureersysteem en je hebt het over de wanbetalers dan is BADDIES inderdaad misschien was onhandig gekozen. Maar dat is dus afhankelijk van de context. Bedenk even dat je code die je initieel gepost hebt niet meer zichtbaar is en dat mensen deze discussie dus nogal lastig zullen kunnen volgen zonder de correcte/volledige context...

[ Voor 24% gewijzigd door RobIII op 17-02-2010 14:11 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
BADDIES is misschien wel een correcte naam, maar het is niet erg duidelijk wat er nu inzit. Het lijkt erop alsof er 1 array per bad guy inzit. Deze array wordt eigenlijk misbruikt om een object bij te houden. Bijvoorbeeld de 1e positie is de x-coordinaat, de 2e positie is de y-coordinaat, de 7e lijkt iets met de vorm te maken te hebben, enz. Daar had wel even een comment aan gewijd mogen worden, wat nu wat was. Als je de code op een goede manier zou omzetten naar zeg c# (gezien je posthistorie) of java, dan zou je dus een class Baddie maken, en geen array meer gebruiken om de gegevens van 1 baddie in op te slaan.

Enkel het lijkt mij dat het in jouw geval handig is om eerst een keer een goede tutorial/goed boek volledig door te nemen, zodat je een aantal basisconcepten van programmeren een beetje snapt. Wat bijvoorbeeld die push-regel doet is vrij universeel en werkt zo in vele programmeertalen. Het lijkt erop alsof je nu een soort gok-programmeer-methode probeert toe te passen, en dat is niet echt handig verder. :p

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • topaj
  • Registratie: April 2008
  • Laatst online: 11-09 15:56
Alles is goed te snappen bij het herschrijven, en is volgens mij dan ook redelijk gelukt.
T wil alleen niet zo slagen een value in een NSMutableArray (cocoa) te vervangen.

De code die ik nu gebruik geeft een Stack error:
JavaScript:
1
[[BADDIES objectAtIndex:loc1] replaceObjectAtIndex:0 withObject:[[NSNumber alloc] initWithInt:[[[BADDIES objectAtIndex:loc1] objectAtIndex:0] intValue] + [[[BADDIES objectAtIndex:loc1] objectAtIndex:2] intValue]]];


Dit was in AS3:
JavaScript:
1
this.BADDIES[loc1][0] = this.BADDIES[loc1][0] + this.BADDIES[loc1][2];


Das behoorlijk moeilijker in cocoa ;)

Groeten

Pagina: 1