[DELPHI] DelphiX, DXTimer probleem

Pagina: 1
Acties:

  • RpR
  • Registratie: November 2003
  • Laatst online: 11-02-2022
Beste Mensen,

Het volgende probleem:

Met Delphi en DirectX (DelphiX) ben ik met nog een klasgenoot een platform
spel aan het bouwen.
De complete 'engine' valt eigenlijk onder een DXTimer, waar alle onderdelen
op het scherm worden getoverd. Ik voer hier een controle uit of
de speler een vijand heeft geraakt, er moet dan een geluid worden afgespeeld
via een bepaalde procedure.
Maar aangezien de DXTimer deze controle heel wat keren per seconde uitvoerd
en die controle dus ook vaker 'true' is wordt mijn geluidje niet één keer afgespeeld,
maar 30 keer over elkaar heen.... :r

Iemand een oplossing? (buiten een "boolean loopje" om, aangezien ik nogal
wat geluidjes moet programmeren... ;) )

An assumption is the mother of all fuck-ups


  • Mr.Nobody
  • Registratie: Oktober 2001
  • Niet online
tja oplossing 2: de objecten die elkaar geraakt hebben weer uitelkaar zetten in de procedure waar ook het geluid wordt afgespeelt :?

Opensource delphi componenten (http://www.delphi-jedi.org)


  • RpR
  • Registratie: November 2003
  • Laatst online: 11-02-2022
Mr.Nobody schreef op 01 november 2003 @ 18:33:
tja oplossing 2: de objecten die elkaar geraakt hebben weer uitelkaar zetten in de procedure waar ook het geluid wordt afgespeelt :?
Ja dat kan, maar.....

Het probleem bij deze oplossing is dat dit alleen kan bij de start van
het afspelen van het geluid. Dat zou betekenen dat je de objecten
ineens een heel stuk moet verschuiven en dat zou een beetje raar
lijken, toch?

An assumption is the mother of all fuck-ups


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 14:22

Tomatoman

Fulltime prutser

Je zult iets moeten introduceren wat je op dit moment nog niet hebt: state. Ieder object kent een bepaalde state (toestand) waarin het verkeert. Die toestand kun je vastleggen in de vorm van een aantal eigenschappen. Iedere iteratiestap kan van elk object de state veranderen volgens vaste regels. Zo heeft je 'schietobject' een bepaald aantal kogels tot zijn beschikking en kan dat aantal nooit kleiner worden dan nul. Ook is er een bepaalde vuursnelheid, die je kunt bijhouden door in de state set van het vuurobject vast te leggen op welk tijdstip de laatste kogel is afgevuurd.

Om een state-verandering door te voeren, zul je iedere iteratiestap de volgende checks moeten uitvoeren:
C:
1
2
3
4
5
6
7
Vuurknop ingedrukt?
Ja  --> Wanneer laatste kogel afgevuurd?
        < 1 seconde geleden  --> Klaar
        >= 1 seconde geleden --> Aantal beschikbare kogels > 0?
                                 Ja  --> Kogel afvuren
                                 Nee --> Klaar
Nee --> Klaar
Een dergelijk state-change-schema zul je voor ieder object moeten opstellen. Dat lijkt nodeloos ingewikkeld, maar naarmate je meer code krijgt ga je dit vanzelf waarderen. Het is een van de weinige manieren om op een heldere en gemakkelijk onderhoudbare manier de programmalogica vast te leggen.

De manier die ik je hier heb aangegeven is (zeer vereenvoudigd) de manier die in professionele simulatieprojecten (vliegtuigsimulatoren, schiettrainers) wordt gebruikt.

[ Voor 3% gewijzigd door Tomatoman op 01-11-2003 19:11 ]

Een goede grap mag vrienden kosten.