Toon posts:

[Algoritme] Pinball

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Na mijn succesvolle omzetting van het spel Pendulumania ben ik weer toe aan
iets nieuws([rml][ Algoritme] Pendulumania[/rml]).

Nu wil ik graag een pinball spelletje maken.


Mijn vraag: Zie tekening
Afbeeldingslocatie: http://www.kaiton.nl/pinball/balval.jpg

Stel ik laat de bal los. Mijn verstand zegt mij dat de bal eerst naar beneden valt,
dan even stuitert(afhankelijk van materiaal) en dan via de heuvels naar beneden
rolt.

Hoe werkt dat in de natuurkunde? Rol weerstand? Zwaartekracht?
Allemaal factoren die volgens mij er mee te maken hebbenn.

De bal heeft de volgende eigenschappen:
deltaX, deltaY (de beweging van de bal opgeslagen in een X en Y component)

Ik denk dat ik een gameloop moet maken:

code:
1
2
3
4
5
6
7
8
9
10
11
while
   Bal.y=bal.y+bal.dy
   Bal.x=bal.x+bal.dx

  doe iets met bal.dy en zwaartekracht
  doe iets met bal.dy en rolweerstand
  doe iets met bal.dx en rolweerstand

  controleer of bal wel die kant op kan(lees misschien een muur,zwart gebied)

spel


Graag hoor ik wat jullie er van vinden.
Natuurlijk zal het resultaat wederom gratis op het internet verspreid worden.
Ook zal ik een PC en PocketPC versie maken.

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Nou je hebt dus te maken met
* de zwaartekracht
* de elasticiteit van een bal (als in: een tennisbal stuitert harder dan een bowlingbal)
* de hoek waarmee de bal het 'zwarte' raakt
* de elasticiteit van het zwarte (bijvoorbeeld een stenen of een 'rubberen' muur)
* de weerstand tijdens het rollen
* de snelheid van de bal

Het is wel veel werk, maar zeker niet onmogelijk om dit allemaal te implementeren.
Er zijn trouwens ook veel open-source pinball games, hieruit kan je ook wel inspiratie halen lijkt me :)

  • Avalanchez
  • Registratie: Juni 2002
  • Laatst online: 25-06-2012

Avalanchez

Phr34k

chris schreef op 19 januari 2004 @ 20:59:
Nou je hebt dus te maken met
* de zwaartekracht
* de elasticiteit van een bal (als in: een tennisbal stuitert harder dan een bowlingbal)
* de hoek waarmee de bal het 'zwarte' raakt
* de elasticiteit van het zwarte (bijvoorbeeld een stenen of een 'rubberen' muur)
* de weerstand tijdens het rollen
* de snelheid van de bal

Het is wel veel werk, maar zeker niet onmogelijk om dit allemaal te implementeren.
Er zijn trouwens ook veel open-source pinball games, hieruit kan je ook wel inspiratie halen lijkt me :)
maar om met dit alles rekening te houden is gekkenwerk. Je kan bijvoorbeeld de elasticiteit van de bal en de weerstand tijdens het rollen gerust laten vallen lijkt mij. Je moet wel bijvoorbeeld implementeren dat als je je bal op het uiteinde van de flipper raakt, het balletje een grotere versnelling krijgt als bijvoorbeeld dicht bij de as van de flipper.

dus:
*zwaartekracht (en zo'n optie om ff te laten zweven is altijd leuk, bv bij het raken van een bumper)
*snelheid van bal
*de invalshoek = uitgangshoek (dus als ik de bal met een hoek pi/4 tegen de x-as stoot, draait de snelheid om, en maakt hij weer een hoek van pi/4 (de kleinste hoek natuurlijk telkens))

Computers are stupid, they can only give you answers. -Picasso


Verwijderd

Avalanchez schreef op 19 januari 2004 @ 21:08:
[...]
*de invalshoek = uitgangshoek (dus als ik de bal met een hoek pi/4 tegen de x-as stoot, draait de snelheid om, en maakt hij weer een hoek van pi/4 (de kleinste hoek natuurlijk telkens))
dat is dan natuurlijk tegenover de Y-as gerekend.
Je zal dus de normaal van het zwarte deel moeten berekenen waar de bal terechtkomt. Daar tegenover dan die hoeken berekenen.

Zou je die elasticiteit niet kunnen opvangen door snelheid met een factor te vermenigvuldigen. (1 voor ideaal geval dan)

  • Mizitras
  • Registratie: September 2002
  • Niet online
Uiteindelijk zal het contact nog altijd zo zijn:


----------
............|
............|
............|


Dus op een hoek, waar de bal zal raken. Het punt dat met die hoek contact maakt moet je dus omzetten in de andere richting. (Rekening houden vanwaar ie komt, maar das bijzaak natuurlijk).
Wanneer ie dus naar rechts ------------->>> zou botsen (ideaal) moet er dus een logaritme wel inzitten dat die dus afbuigt met factor zoveel en rekeningsnelheid, vanwege zwaartekracht/aantrekkingskracht.

De hardheid muur en bal tel je 'samen' ofzo om het simpel te houden en deze 'schokdemper' of 'vergroter' vermenigvuldig je dan nog eens met de snelheid. Wat die iets doet toenemen of afnemen dus.

Succes

"the fucking alpha cpp compiler seems to fuck up the goddam type "LPITEMIDLIST", so to work around the fucking peice of shit compiler we pass the last param as an void *instead of a LPITEMIDLIST"


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:51

.oisyn

Moderator Devschuur®

Demotivational Speaker

Avalanchez schreef op 19 januari 2004 @ 21:08:
Je moet wel bijvoorbeeld implementeren dat als je je bal op het uiteinde van de flipper raakt, het balletje een grotere versnelling krijgt als bijvoorbeeld dicht bij de as van de flipper.
Ik denk niet dat je het zo moet zien, maar eerder als een entiteit dat tegen je bal aan komt, met als richting de normaal van de flipper op het raakpunt met de bal, en als snelheid de afstand dat dat punt op de flipper heeft afgelegd gedeeld door de tijd. En dat is dan weer uit te rekenen door de draaisnelheid van de flipper te nemen en de afstand van het raakpunt tot het rotatiepunt van de flipper

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Ja, het is inderdaad een kwestie van de normaal bepalen van het geen je tegenaanbotst, en daar in spiegelen, en natuurlijk bij elke iteratie van je loopje een bepaalde naar beneden verwerken, natuurlijk wel een eindige snelheid, want anders gaat je bal na een tijdje nogal hard :P

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
eamelink schreef op 19 januari 2004 @ 21:26:
Ja, het is inderdaad een kwestie van de normaal bepalen van het geen je tegenaanbotst, en daar in spiegelen, en natuurlijk bij elke iteratie van je loopje een bepaalde naar beneden verwerken, natuurlijk wel een eindige snelheid, want anders gaat je bal na een tijdje nogal hard :P
Als je altijd zwaartekracht berekent, remt het de bal ook af als je omhoog schiet hoor. Ten tweede: In een echte flipperkast gaat toch ook niet de zwaartekracht ff uit?

{signature}


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:51

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 19 januari 2004 @ 21:17:
terechtkomt. Daar tegenover dan die hoeken berekenen.
hoeken berekenen is niet nodig, je hoeft slechts de bewegingsvector te spiegelen met de normaal.

Stel:
v = bewegingsvector van de bal
n = normaal van het vlak dat de bal raakt

Dan:
v' = v - 2 * (n * v)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

.oisyn schreef op 19 januari 2004 @ 21:43:
[...]


hoeken berekenen is niet nodig, je hoeft slechts de bewegingsvector te spiegelen met de normaal.
das wat ik dus bedoelde :) m'n woordkeuze was inderdaad niet optimaal

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Met n * v dan dus het standaard inprodukt en 2 * (n . v) dus gewoon scalar vermenigvuldiging.

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:51

.oisyn

Moderator Devschuur®

Demotivational Speaker

Anders had ik wel n x v gedaan :P

[ Voor 8% gewijzigd door .oisyn op 20-01-2004 14:36 . Reden: kromme zin, kwam ik achter ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Je hebt ook nog gewoon vermenigvuldigen (*) :) Is nogal essentieel dat het een inprodukt is...

Uitprodukt is niet echt van toepassing. :p

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:51

.oisyn

Moderator Devschuur®

Demotivational Speaker

Gewoon vermenigvuldigen? Als in, component-wise? Dat is niet echt een echte wiskundige operatie, en ik kan me ook niet iets voorstellen waarbij dat gebruikt wordt. voor vermenigvuldigen van scalars en het inproduct van vectoren wordt dan ook beide met de ∙ aangeduid. En aangezien die niet op het toetsenbord zit en bij het programmeren de * wordt gebruikt gebruik ik die ook even als inproduct

Hoe zou je anders een gewone component-wise vermenigvuldiging willen definieren dan? Ben ik wel benieuwd naar :)

.edit: Vector multiplication @ mathworld

[ Voor 10% gewijzigd door .oisyn op 19-01-2004 23:11 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Boss
  • Registratie: September 1999
  • Laatst online: 06:28

Boss

+1 Overgewaardeerd

Ik denk dat je 2 'dynamica' varianten kan loslaten op dit probleem: eentje waarin je geen rekening houdt met de rotatie van de bal, en eentje waarin je dat wel doet.

Wil je het realistisch maken, dan moet je daar rekening mee houden, maar komt er wel wat extra rekenwerk bij (een hoop, heb er net vorige week tentamen in gehad :)). Als je het niet doet, kan de bal leuk stuiteren, maar gaat het wel opvallen dat er iets niet helemaal klopt als het een pinball spel wordt.
Bijvoorbeeld, als de bal een hoeksnelheid zou hebben terwijl hij recht op de grond valt, gaat hij scheef opzij. Om het met de hand uit te moeten rekenen is lastig, maar als je eenmaal de juiste formules hebt is het rekenwerk voor de compu een eitje.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:51

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dat is op zich wel waar, maar een pinball heeft bijna nooit een spin, en het is ook vrij moeilijk om dat voor elkaar te krijgen. Dan moet je 'm of heel hard door een lane krijgen (zodat ie tegen de zijkant aan rolt), of heel hard met met het puntje van een flipper raken. En dan nog, de massa van het balletje is dermate hoog tov z'n grootte dat als ie bijvoorbeeld tegen een rubberen wand aankomt (veel wrijving) dat ie dan gewoon stopt met spinnen. Het heeft verder weinig effect op z'n bewegingsrichting

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • staefke
  • Registratie: December 2003
  • Laatst online: 19-05 22:28
ProPinball Big Race USA doet dat (in ieder geval ziet het er zo uit als je de bal over je flipper heen laat lopen). Denk alleen niet dat het in de bal-dynamica gebruikt wordt, maar het ziet er wel erg mooi uit... :9~

duh ?


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 26-05 00:01

Janoz

Moderator Devschuur®

!litemod

Paar toevoegingen:


  • Rolweerstand is bij een metalen bal in een flipperkast te verwaarlozen. Hou daar gewoon geen rekening mee.

  • Gebruik voor de muren een vector plaatje ipv een bitmap. Het uiteindelijke speelveld kan natuurlijk wel een bitmap zijn, maar het bepalen van een snijpunt en normaal is bij een vector (of een functie bezier) veel makkelijker.

  • Elasticiteit kun je gewoon per edge bepalen en hier een vermenigvuldigings factor voor bepalen die je op de lengte van de bal vector toepast (dus de snelheid).

  • Botsingen bereken je niet met de positie, maar met de lijn tussen de vorige en de volgende positie. Hierdoor kan een snelle bal niet door een muur schieten, en kun je 'halverwege stuiteren'. Hiermee bedoel ik dat je de afgelegde afstand de muur in spiegelt (eventueel met toepassing van elasticiteits factor) zodat de bal al weer ietsje van de muur af is. Hierdoor haal je toch een hogere 'schijnbare' resolutie.

  • [ Voor 3% gewijzigd door Janoz op 20-01-2004 09:59 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Boss
  • Registratie: September 1999
  • Laatst online: 06:28

Boss

+1 Overgewaardeerd

Rolweerstand:
Ik kon vroeger aardig flipperen, en er zijn wel degelijk manieren om de bal een 'spin' mee te geven. Bijvoorbeeld: je laat de bal van het begin tot het einde op de flipper rollen, waarna je hem wegschiet. Dan heeft hij zeker wel een spin. En aangezien een kast redelijk zware ballen gebruikt, zal de spin zeker uitmaken.

Maar ik denk dat het effect inderdaad niet zo groot is dat je het direct zal merken. Mocht alles af zijn, en je wilt het nog wat uitbreiden dan zou ik er toch nog eens naar kijken. Al is het maar 'why? because I can'.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 26-05 00:01

Janoz

Moderator Devschuur®

!litemod

Met de rolweerstand in mijn post bedoel ik niet spin, maar gewoon de weerstand tussen de bal en het oppervlak waar deze op rolt. Tenzij je van plan bent een zandbak oid in je flipperkast te leggen kun je dat gewoon negeren.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
.oisyn schreef op 19 januari 2004 @ 21:43:
[...]


hoeken berekenen is niet nodig, je hoeft slechts de bewegingsvector te spiegelen met de normaal.

Stel:
v = bewegingsvector van de bal
n = normaal van het vlak dat de bal raakt

Dan:
v' = v - 2 * (n * v)
Je bent hier een scalar aan het aftrekken van een vector :+.
Als de lengte van n gelijk is aan 1 is het

v' = v - 2 * (n * v) * n

Pas de replâtrage, la structure est pourrie.


Verwijderd

Topicstarter
poepoe!

weer genoeg huiswerk voor een weekend!
Ik ben van plan om een mooie pinball game te maken voor de pocketpc.

Ik zal eerst met de basis beginnen en rotatie factoren negeren.

Er is trouwens haast geen concurrentie op de pocketpc, dus zover hoef ik niet te
gaan!

Bedankt voor de tips

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 15-05 14:44

_Thanatos_

Ja, en kaal

Ik ben van plan om een mooie pinball game te maken voor de pocketpc
In pinball-spellen kun je vaak ook de kast een ros geven, of em ff 5cm optillen en dan loslaten, hoe los je dat met pocketPC op? Dat ie op tilt gaat, hoef je iig niet te programmeren dan :+

Sorry hoor, moest ff :)

日本!🎌


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:51

.oisyn

Moderator Devschuur®

Demotivational Speaker

Apollo_Futurae schreef op 20 januari 2004 @ 21:25:
[...]


Je bent hier een scalar aan het aftrekken van een vector :+.
Als de lengte van n gelijk is aan 1 is het

v' = v - 2 * (n * v) * n
8)7
vergeten idd

:? volgens mij heb ik mijn post vroegtijdig afgekapt, want ik zie nu ook dat ik niet heb vermeld dat om de bal extra te laten stuiteren of juist om de schok te absorberen je die v' moet vermenigvuldigen met een bepaalde factor, terwijl ik zou zweren dat ik dat had getypt :? :? :?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 26-05 00:01

Janoz

Moderator Devschuur®

!litemod

Nee joh, dat heb je gewoon in mijn post gelezen ;)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:51

.oisyn

Moderator Devschuur®

Demotivational Speaker

Oh je bedoelt de post die ik straks ga verwijderen :P

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1