Gå til innhold

Anbefalte innlegg

Jeg er enda i begynner-stadiet for å programmere i delphi. Jeg har tenkt å lage en enkel windows versjon av spilletyprn "DX-ball". Jeg bruker Turbo Delphi.

 

Håper noen kan svare på ett eller flere av disse spørsmålene mine.

 

På "Form1" har jeg 5 "TPanel". En på bunnen som jeg kaller "Death", en kort "pinne" som skal styres av musen til høyre og venstre. En vegg som jeg kaller "R" for right, og en annen vegg som jeg kaller for "L" for left. Og den siste er taket jeg kaller "Top".

 

Mine spørsmål er følgende:

 

Jeg har fått musen til kun å bevege "pinnen" til høyre og venstre. Men jeg lurer på hvordan jeg får pinnen til og stoppe ved "L" og "R"?

 

Jeg har også en TShape som er rund, som jeg kaller "ball". Hvordan kan jeg få ballen til og bevege seg opp på skrå og treffe "L" og "R"?

 

Og til sist. Kan jeg "gjemme" musepekeren, slik at kun "pinnen" som beveger seg vises, og ikke musepekeren?

 

Legger ved et bilde av "Form1".

post-159536-1209086298_thumb.jpg

Lenke til kommentar
Videoannonse
Annonse

jeg ville ha brukt paintbox komponenten til det , men det er dit valg.

 

når jeg bruker ordet komponenter så menr jeg disse objektene som du kan plukke frem fra verktøy paletten ( tool palette)

 

her må du bruke en del variabler og så sjekke dem opp mot hverandre.

på samme måte som formen ( form1) har variabler som bestemmer plasseringen har også panelene det .

 

bl.a. variablene left,top ,height og width.

det er disse du må bruke

 

når du beveger pinnen så må du sjekke om Death.left ikke er mindre en panelL.left+panelL.widt( høyre posisjon på panelL).

 

// hindre at markøren går for langt til venstre

if Death.left > panell.left+panell.width then Death.left:= panell.left+panell-width;

 

 

// hindre at markøren går for langt til høyre

if Death.left+pinne.width < panelr.leftl then Death.left:= panell.left - Death.width

på samme måte kan du holde ballen innenfor den rammen du har laget .

 

for å bevege ballen bruker du timeren . set intervalet til en passelig verdi ( antal millisekunder ) mellom hvert intervall.

 

for å flyrtte den en posisjon

høyre : ball.left:=ball.left+1;

venstre : Ball.left:=ball.left-1;

opp : ball.top:=ball.top-1;

ned : ball.top:=ball.top+1;

 

for å flytte den på skrå må du endre både topp og left variabelen på samme tid.

 

husk også å ta med både høyde bredde på kompontene når du beregner begrensningen til ballen

høyre blir left+width og bunn blir top+height

Lenke til kommentar

Her kommer jeg med et par småting.

Hvis man skal få "ballen" til å bøye av så vil man trenge en test for det. Dette er ikke vanskelig å lage. Hvis du tenker deg at ballen kommer mot en loddrett vegg, etter at ballen treffer veggen vil den sprette med motsatt fart på x-aksen.

Koden kan se sånn ut, L:

 

 

if ball.x => vegg.x then
 ball.x := -ball.x;

 

 

 

for R blir det:

 

 

if ball.x =< vegg.x then
 ball.x := -ball.x;

 

 

 

For horisontale vegger, Top:

 

 

if ball.y =< vegg.y then
 ball.y := -ball.y;

 

 

 

Men disse kodene for refleksjon blir best på et firkantet legeme, hvis du skal ha ordentlig refleksjon av kula, så må du regne litt mer først. Og det gidder ikke jeg gjøre nå :p

 

For å skjule musa bruker man denne koden i FormCreate:

 

 

ShowCursor(False);

 

 

 

Håper dette hjelper litt :)

 

EDIT: Glemte å si velkommen til forumet Popsux :)

Endret av hjahre
Lenke til kommentar

Takker for svarene! Og takk for velkomsten! :)

 

Vil takke dere begge: elg-elg123 og hjahre for svar. Men fikk ikke kodene til virke. Må være en annen kode for å gjøre dette eller noe...

Endret av Popsux
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...