Toon posts:

[FCS] Snake versie

Pagina: 1
Acties:

Verwijderd

Topicstarter
He,

Ik ben momenteel bezig met het maken van een multi-user spelletje, met als basis principe het principe van snake. Dit spelletje word gemaakt in Flash icm. Flash Communication Server.

Ik heb het nu zo gemaakt dat de slang uit blokjes bestaat en dat er steeds een blokje ge-attached word, zodat de slang langer wordt.
Als beide spelers gaan spelen moeten beide spelers natuurlijk de "slang" van de ander zien en zien wat die doet en welke kant die op gaat. Nu is alleen de vraag hoe ik dit het beste kan doen, in de zin van het heen en weer sturen van data via de FCS, zodat het gespeeld kan worden over een ADSL verbinding.

In eerste instantie was mijn idee om een array te vullen met de x en y coordinaten van elke slang en deze over te zenden om vervolgens de "slang" op het beeld weer te geven. Dit lijkt me echter nogal 'veel' data om steeds over te zenden.

Heeft iemand een goed idee om de over te zenden data zo minimaal te houden?
Bij voorbaat dank.

Verwijderd

Die data valt reuze mee hoor:

Het lijkt me dat je per beweging (dus, naar links naar rechts) een trigger moet meesturen, de rest kan wel aan client kant geregeld worden.

Dus wanneer de ander naar links gaat de x,y versturen en een flag die aangeeft of er naar links of rechts bewogen wordt. Alle andere dingen kunnen aan client zijde worden geregeld (de schernen zijn immers hetzelfde en de regels ook).

Verwijderd

Topicstarter
Ah dat is idd een idee, waar ik ook al aan gedacht had...

Maar is het dan niet zo dat als je de rest aan de client-side laat regelen en de ene computer is net ff iets sneller dan de andere dat het dan mischien niet helemaal synchroon loopt? Dat was namelijk mijn motivatie om niet enkel per beweging te syncen.

Verwijderd

Verwijderd schreef op maandag 14 november 2005 @ 10:33:
Ah dat is idd een idee, waar ik ook al aan gedacht had...

Maar is het dan niet zo dat als je de rest aan de client-side laat regelen en de ene computer is net ff iets sneller dan de andere dat het dan mischien niet helemaal synchroon loopt? Dat was namelijk mijn motivatie om niet enkel per beweging te syncen.
Jawel, daar zijn functies voor om bewegingen te synchroniseren. Bijvoorbeeld gebruik maken van timers (het spel moet toch op gereduceerde snelheid lopen, met die timers kan je dan je bewegingen 'gelijktrekken')

Verwijderd

Topicstarter
Sorry ik begrijp niet helemaal wat je bedoeld :?

Wat bedoel je precies met die timers? Een interval die om de zoveel tijd een functie op de server aanroept en dan de snakes gelijkt trekt??

Verwijderd

Maak kennis met RemoteSharedObjects :)

Een belangrijk onderdeel van Flashcom zijn deze objecten!
Wanneer een willekeurige client een property aanpast in dit object dan zal er bij alle andere clients die een connectie hebben met dit object een onSync handler worden uitgevoerd (met als argument de nieuwe waarde van de property).

Dit is dus retehandig voor online gaming.
Je moet het dus als volgt zien. Je hebt je PlayerManager en je OpponentManager.

De PlayerManager is een class (model) die alles bijhoudt wat de gebruiker doet. Beweegt hij naar rechts, dan zorgt de PlayerManager ervoor dat hij ook naar rechts verplaatst etc. Ook heeft deze Manager een RemoteSharedObject waarin alle gegevens van de player (positie, lengte etc.) in wordt opgeslagen. En dit elk frame (gebruik dus onEnterFrame ).

Nu de OpponentManager.
Die heeft namelijk een connectie met de RemoteSharedObject van de tegenstander. Elke keer wanneer je tegenstander beweegt wordt de onSync handler uitgevoerd en reageert de OpponentManager hier dus op. De reactie is in dit geval simpel, pas de lengte of positie van de snake aan.

Hoe meer players, hoe meer SharedObjects. Heb je bv. 4 players in één game, dan moet elke player zich abonneren op de drie SharedObjects van de overige tegenstanders.

Je hoeft overigens niet bang te zijn voor bandbreedte etc. De Flash Communication Server is gemaakt voor het uitwisselen van data en bij games is dit relatief weinig (ook al stuur je elk frame). Mocht Flashcom het niet trekken op één of andere manier dan zorgt hij zelf ervoor dat er frames worden gedropt. Maar bedenk dat Flashcom ook wordt gebruikt voor het streamen van video en audio.

@Kipbanaan:
Heb je ooit met Flashcom gewerkt?

[ Voor 15% gewijzigd door Verwijderd op 14-11-2005 11:23 ]


Verwijderd

Topicstarter
Blijkbaar heb ik het idee gegeven dat ik niet op de hoogte ben van SharedObjects, maar het tegendeel is waar ;)

Dat Flashcom frames dropt in het geval hij het "niet trekt" is wel nieuw voor mij en i aardig relaxed.

Nu is het bij mij zo dat er altijd sprake is van 1 op 1 snake, dus gebruik ik 1 SharedObject.
Momenteel geef ik enkel de gegevens door in bv. een Array, maar jou idee is dus om gewoon het heel object over te sturen met daarin de info?

Verwijderd

Met een RemoteSharedObject stuur je geen compleet object over, maar de properties daarvan. Een RemoteSharedObject wordt opgeslagen op je FlashCom server en is toegankelijk voor een gebruiker die er een connectie mee heeft gemaakt. Wanneer deze connectie is gemaakt wordt de gebruiker op de hoogte gesteld (dmv. onSync) wanneer de properties van dit object worden aangepast.

Wanneer je 1 vs. 1 speelt heb je dus twee RemoteSharedObjects nodig. Eentje voor je tegenstander die zijn gegevens bijhoudt, zodat zijn bewegingen live bij jou op het scherm worden getoond. Maar ook eentje voor jou die jouw gegevens bijhoudt en die ervoor zorgt dat jouw bewegingen bij je tegenstander op het scherm worden getoond. :)

[ Voor 32% gewijzigd door Verwijderd op 14-11-2005 11:33 ]


Verwijderd

Topicstarter
ok ok ik snap, maar ik dacht dat je bedoelde dat je de gehele eigen class PlayerManager wilde oversturen. Maar goed, enkel gewoon de attributes dus :>

Goed, dat ga ik maar eens proberen dan.
Bedankt!

Verwijderd

Laat weten of het is gelukt en natuurlijk ook het eindresultaat laten zien.
Heb wel zin om je ass te kicken met een stevige pot Snake })

Verwijderd

Topicstarter
Het komt in principe niet op internet want het is in opdracht van een klant, maar mischien is het mogelijk een afgeslankte versie op mijn site te zetten ;)

I'll keep you informed

Verwijderd

Verwijderd schreef op maandag 14 november 2005 @ 11:19:
Maak kennis met RemoteSharedObjects :)
kijk in zijn post history en je zal zien dat hij RemoteSharedObjects al kent

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op maandag 14 november 2005 @ 12:50:
[...]


kijk in zijn post history en je zal zien dat hij RemoteSharedObjects al kent
Hij heeft dat inmiddels al bevestigd, dus je hoeft het niet te benadrukken :)

Je post komt nu nl. een beetje over als een postcount-score, let daar even op?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Verwijderd schreef op maandag 14 november 2005 @ 12:50:
kijk in zijn post history en je zal zien dat hij RemoteSharedObjects al kent
Ik ga niet eerst iemand zijn verleden doorspitten alvorens ik hem/haar ga helpen.
Pagina: 1