Archief - Probleem in ActionScript3 met spelletje

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

mXXX

Legacy Member
Hallo,

Ik heb enkele fouten in mijn spel dat ik aan het maken ben. Ik heb daar letterlijk een week voor zitten zoeken, aan medestudenten gevraagd en zélfs aan mijn docent, maar die konden mij allemaal niet helpen. Na lang zoeken, geef ik het eigenlijk een beetje op en kom ik hier eens aankloppen in de hoop dat iemand mij kan helpen met dit groot probleem.

Het spel is eigenlijk het volgende: je bent een zwart blokje (dat later nog vervangen zal worden door een personage of dergelijke) en die moet zo hoog mogelijk zien te geraken door middel van op blokjes te springen die vallen.
Dat personage kan momenteel alles: springen, botsen tegen blokjes, doodgaan (het sterven is nog niet uitgewerkt omdat ik vastzit en heel de tijd achter de fout zocht :p, als je sterft dan kan uw personage gewoon niet meer bewegen en krijg je in uw output 'true' te zien)
op de blokjes springen, van de blokjes vallen.

Mijn probleem nu is het volgende:
Als er exact 2 blokjes(blok A en blok B) naast elkaar vallen zodat ik er NORMAAL gezien gewoonweg overkan lopen (dus ik wil als ik op blok A sta gewoon kunnen lopen naar blok B) loopt het verkeerd. Ik weet zelfs niet waarom of hoe en dergelijke :s
Ik zat hier echt een lange tijd achter te zoeken :s daarom hoop ik dat iemand mij kan helpen.
Om het gemakkelijker te maken heb ik mijn files geupload zodat jullie dit kunnen bekijken want het is een beetje abstract met deze rare uitleg.
Als je het zelf eens speelt zal je wel begrijpen met wat ik bedoel met mijn probleem. Om het gemakkelijk te maken voor jullie heb ik maar 1 type blokje laten vallen (wil je toch meerdere blokken haal dan de parameter in mijn Switch Case in de classe Main uit comment)
Voor de eigelijke code van het probleem zal je in de classe player moeten zitten.

Kan iemand mij hiermee helpen aub? Ik ben nog een beginner in Flash AS3 :S
heb wel wat ervaring in C# en in VB.net...

Ahja nog 2 kleine vraagjes:
1. Hoe zet ik hier een menu bij, want bij bv C# zou ik gewoon een nieuwe form maken en het daar maken en die dan als startup form zetten, maar in flash gaat zo iets niet hé? Dus is er een manier om een menutje te hebben om start game en options en dergelijke te hebben?

2. Hoe kan je het spel pauzeren? Hierbij heb ik écht geen idee :p

downloadlink naar mij game
MEGAUPLOAD - The leading online storage and file delivery service

NeverwinterX

Legacy Member
Ik ben even gaan kijken, maar ik heb geen zin om dat telkens te compilen en te testen, dus ik doe maar een educated guess:

Code:
				if (this.y > ground)
				{
					this.y = ground;
					isJumping = false;
				}
Klopt dit wel? Wat als je op een blokje staat, dan wil je niet op de grond gezet worden?

Maar goed, misschien is dat niet de enigste bug. Ik zie wel meer verdachte dingen en je coding style is ook niet bepaald koosjer.

mXXX

Legacy Member
Normaal gezien zou dit wel moeten kloppen, heb daar al zitten zoeken. De docent heeft dat stukje code ook eens bestudeerd, omdat ik dat vroeg maar hij zei dat het niet daaraan zou liggen. Heb echt al meerdere zaken geprobeerd hoor...

NeverwinterX

Legacy Member
Het zou het probleem nochtans kunnen verklaren. Omdat als je op een blokje staat, het spel dan ten onrechte denkt dat je op de grond en dus in het blokje staat en dus dood bent.

YaMo

Legacy Member
mXXX zei:
1. Hoe zet ik hier een menu bij, want bij bv C# zou ik gewoon een nieuwe form maken en het daar maken en die dan als startup form zetten, maar in flash gaat zo iets niet hé? Dus is er een manier om een menutje te hebben om start game en options en dergelijke te hebben?

2. Hoe kan je het spel pauzeren? Hierbij heb ik écht geen idee :p

1) Ik neem aan dat dit spel zich gewoon volledig in frame 1 ofzo van de stage in je fla-file afspeelt?
Doe bij het starten van de applicatie "gotoAndStop(1)". In frame 2 maak je een menuutje, bijvoorbeeld met een button "Play". In het Click-event van die button voer je "gotoAndStop(1)" uit (of misschien stage.gotoAndStop(1), ben ik niet zeker van) en start je alle eventlisteners die met de beweging en het aanmaken van de blokken enzo te maken hebben.

2) in "pseudo"-code, want ik ken dat allemaal niet van buiten :p :
Code:
var pauze:Boolean = false;

function onKeyDown(e:KeyEvent):void{
  if(e.key()=='p'){
    if(pauze){
      //start eventlisteners en/of timers
      pauze = false;
    } else{
      //stop eventlisteners en/of timers
      pauze = true;
    }
  }
}

De eventlistener die deze functie oproept, moet je natuurlijk niet stoppen.

mXXX

Legacy Member
NeverwinterX zei:
Het zou het probleem nochtans kunnen verklaren. Omdat als je op een blokje staat, het spel dan ten onrechte denkt dat je op de grond en dus in het blokje staat en dus dood bent.

Ik ga me deze avond er nog eens even op verdiepen en enkele zaken uitproberen, ik geef vanavond laat, of morgen ten laatste feedback van hoe het afgelopen is.

YaMo zei:
1) Ik neem aan dat dit spel zich gewoon volledig in frame 1 ofzo van de stage in je fla-file afspeelt?
Doe bij het starten van de applicatie "gotoAndStop(1)". In frame 2 maak je een menuutje, bijvoorbeeld met een button "Play". In het Click-event van die button voer je "gotoAndStop(1)" uit (of misschien stage.gotoAndStop(1), ben ik niet zeker van) en start je alle eventlisteners die met de beweging en het aanmaken van de blokken enzo te maken hebben.

2) in "pseudo"-code, want ik ken dat allemaal niet van buiten :p :
Code:
var pauze:Boolean = false;

function onKeyDown(e:KeyEvent):void{
  if(e.key()=='p'){
    if(pauze){
      //start eventlisteners en/of timers
      pauze = false;
    } else{
      //stop eventlisteners en/of timers
      pauze = true;
    }
  }
}

De eventlistener die deze functie oproept, moet je natuurlijk niet stoppen.

Bedankt :) zal het eveneens uitproberen!

YaMo

Legacy Member
mXXX zei:
Bedankt :) zal het eveneens uitproberen!

Je moet trouwens in het voorbeeld dat ik gaf eerst gotoAndStop(2) uitvoeren (niet gotoAndStop(1) zoals ik foutief getypt had), maar dat zal je zo ook wel begrepen hebben, zeker :p

mXXX

Legacy Member
YaMo zei:
Je moet trouwens in het voorbeeld dat ik gaf eerst gotoAndStop(2) uitvoeren (niet gotoAndStop(1) zoals ik foutief getypt had), maar dat zal je zo ook wel begrepen hebben, zeker :p

Ja dat had ik door :) vergissen is menselijk hé ;)
Maar nog een vraag: ik heb niets in mijn frame 1 eigenlijk, ik werk volledig OO, alles staat geprogrammeerd in mijn classe Main. Kan dezelfde methode dan gebruikt worden?

YaMo

Legacy Member
mXXX zei:
Ja dat had ik door :) vergissen is menselijk hé ;)
Maar nog een vraag: ik heb niets in mijn frame 1 eigenlijk, ik werk volledig OO, alles staat geprogrammeerd in mijn classe Main. Kan dezelfde methode dan gebruikt worden?

Je tekent alles via code?
Als je je startmenu wel via dat tekenprogramma gaat maken kan je dat gewoon in frame 1 zetten, frame 2 leeglaten, en dan weer gotoAndStop(...) gebruiken.
Als je de knoppen voor je menu en heel die zever ook via actionscript gaat toevoegen, denk ik dat je in het event om het spel te starten dan alle children die je handmatig toegevoegd hebt om dat menu te vormen ook weer handmatig moet verwijderen.

mXXX

Legacy Member
Nee ze zijn allemaal al getekend en heb ze als movieClips gezet en ook zodanig geëxporteerd dat ze ook te gebruiken zijn met actionscript.
Ik heb niets staan op mijn scene, maar ik laat er alles op verschijnen door middel van code. Die zet dan mijn getekende movieclips op de scene.

Ik zal eens wat proberen te spelen met de gotoAndStop() :)
Ik laat je nog wel iets weten, dank u wel voor uw hulp en uitleg :)

YaMo

Legacy Member
Het kan trouwens ook wel dat er betere manieren zijn om zoiets te doen. Ik ben ook geen flash-expert.

mXXX

Legacy Member
Fout is er uit gehaald :)
NeverWinterX je zat fout, de fout zat in mijn functie 'isHit'

Yamo: Menu is anders gedaan dan je zei, heb dit ook volledig geprogrammeerd. Heb er ook een beetje Twitter feeds(XML) in geImplementeerd :)

Score werd toegevoegd.

Ik moet nog 1 laatste zaak doen, maar weet eigenlijk niet goed hoe, ik denk dat dit simpel is maar nog nooit gebruikt en denk dat het enkel mogelijk is in Flash?
Ik wil dat bv. als mijn character in de helft van het scherm zit, dus nadat hij hoog gesprongen is. dat de scene zogezegd mee naar boven zou bewegen.
Want als ik nu tot boven geraak, kan ik niet meer verder spelen aangezien, hij uit het scherm is. Weet iemand hoe ik dit kan doen?
Ik dénk dat het simpel is, heb al zitten zoeken op google naar interactive scene maar oogt niet veel resultaat..

het (bijna) volledige spel. MEGAUPLOAD - The leading online storage and file delivery service
Als iemand deze eens wilt testen, iets bekijken, feedback geven, mag altijd.

Hoop dat jullie mij hiermee kunnen helpen :)

YaMo

Legacy Member
Zoek eens op "flash side scroller" ofzo. Heb ik zelf ook nog nooit gedaan.
En kan je je spel naar iets anders dan MegaUpload uploaden? :p Want ik zou het wel eens willen zien.

GregoryCo

Legacy Member
Kun je niet met een controle werken die kijkt of je boven uw stage zit?
Kheb je code niet bekeken en mijn excuses als er iets mis is (tis al tijdje geleden).

Zo iets bvb.:
Code:
if(ventje.y == stage.stageHeight / 2)
{
    //hier uw decor dat van y-positie veranderd
}

En als dit niet lukt kun je mss met een hitTest werken. Je trekt een onzichtbare lijn in het midden van uw stage (hoogte) en controleert of er een hit is met uw ventje

mXXX

Legacy Member
YaMo zei:
Zoek eens op "flash side scroller" ofzo. Heb ik zelf ook nog nooit gedaan.
En kan je je spel naar iets anders dan MegaUpload uploaden? :p Want ik zou het wel eens willen zien.
Download FallingBlocks.zip for free on Files
Hier is linkje, kan zijn dat het iets langer gaat duren voordat het starts scherm opent omdat hij de twitFeeds moet binnenhalen, anders open je het fla bestand daar gaat het vele sneller

GregoryCo zei:
Kun je niet met een controle werken die kijkt of je boven uw stage zit?
Kheb je code niet bekeken en mijn excuses als er iets mis is (tis al tijdje geleden).

Zo iets bvb.:
Code:
if(ventje.y == stage.stageHeight / 2)
{
    //hier uw decor dat van y-positie veranderd
}

En als dit niet lukt kun je mss met een hitTest werken. Je trekt een onzichtbare lijn in het midden van uw stage (hoogte) en controleert of er een hit is met uw ventje
De if zelf zou zeker en vast moeten lukken, dat moet zeker geen probleem zijn. Het probleem waar ik aan vast zat is eigenlijk hoe ik de scene zelf naar boven krijg en oneindig laat doorlopen.

Ik heb het nu anders gedaan: Als mijn character aan de top geraakt, gaat hij verder naar een hogere level. Dit maakt het spel ook moeilijker want hoe hoger je geraakt hoe minder steps ( de stappen die je links/rechts gaat maken zijn dan kleiner/trager)

Daar zit nog 1 bug in naar mijn weten, maar heb daar momenteel geen tijd meer voor omdat ik nu in mijn examen periode zit.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan