konsept1 Skrevet 22. august 2003 Del Skrevet 22. august 2003 Hei.. Har laget en knapp som gjør dette: trykker du på den skrur maskinen seg av.. har oxo laget slik at label 1 går mot label3 og nå label 1 treffer label3 står det en melding på skjermen.. så skulle jeg gjerne laget slik at når label1 treffer label3 skrur maskinene seg av ved hjelp av knappen jeg lagget. Hvordan får jeg dette til?? Lenke til kommentar
tasle Skrevet 23. august 2003 Del Skrevet 23. august 2003 Det høres ut som du allerede har en prosedyre som trigges og skriver ut en melding når de to labelene treffer hverandre. I denne prosedyra skriver du i tillegg, før den avsluttes : Button1.Click; hvis det er button1 som får maskinen til å slå seg av. Lenke til kommentar
dalai Skrevet 24. august 2003 Del Skrevet 24. august 2003 men hvordan er koden din for å teste om label'ene treffer hverandre? er litt nysgjerrig Lenke til kommentar
tasle Skrevet 24. august 2003 Del Skrevet 24. august 2003 Jeg tipper han har to labler ved siden av hverandre med et lite mellomrom på en cm eller så, og den ene - for eksempel den høyre beveger seg mot den til venstre. En timer flytter den høyre labelen mot venstre etter et enkelt opplegg a la dette: Procedure TForm1.Timer1Timer (Sender: TObject); Begin If Label2.Left > (Label1.Left + Label1.Width) Then Label2.Left:= Label2.Left - 1; If Label2.Left = (Label1.Left + Label1.Width) Then Label3.Caption:= 'PANG !'; End; Label1 her er den til venstre, label2 er den til høyre som beveger seg. Label3 er en label under disse to som sier PANG når label2 sin Left er lik Label1 sin (Left + Width) Lenke til kommentar
dalai Skrevet 24. august 2003 Del Skrevet 24. august 2003 hvis dette skal være en algoritme for collision-test så må jeg si at dette må skrives om. for det første tester den kun i x-plan. det må ihvertfall implementeres en test for xy-planet. så da må dette tas med i beregningen: labelX.Top + font-høyden for labelen Lenke til kommentar
SimenAndre Skrevet 24. august 2003 Del Skrevet 24. august 2003 Hehe du må prøve litt selv. Først sier jeg deg hvordan maskinen skrus av, og så klarer du ikke engang dette?!? Den koden som står i knappen er jo BARE shutdown som kaller på procedyren shutdown. Så alt du trenger å bytte ut den Pang greia er bare ved å skrive SHUTDOWN. Hmmz ikke for å være slem men det burde du ha skjønt. Procedure TForm1.Timer1Timer (Sender: TObject); Begin If Label2.Left > (Label1.Left + Label1.Width) Then Label2.Left:= Label2.Left - 1; If Label2.Left = (Label1.Left + Label1.Width) Then SHUTDOWN; End; Sorry hvis jeg er litt slem men jeg tror du burde kjøpe en bok og sette deg ned å lese litt. Lenke til kommentar
tasle Skrevet 24. august 2003 Del Skrevet 24. august 2003 Hvis labelene ikke er justert like høyt så får han (konsept1) ta utgangspunkt i en rett linjes ligning, y = ax + b. Først beregne stigningsforholdet a ved hjelp av a = dy/dx = (y1 – y2) / (x1- x2) = (Label1.Top – Label2.Top) / (Label1.Left – Label2.Left) Deretter b : b = y1 – a * x1 = Label1.Top – (a * Label1.Left) Så setter han inn a og b I den første ligninga : y = (Label1.Top – Label2.Top) / (Label1.Left – Label2.Left) * x + Label1.Top – (a * Label1.Left) og lar x gå fra x2 til x1 i en løkke (hvis Label2.Left > Label1.Left): x1:= Label1.Left; x2:= Label2.Left; a:= (Label1.Top - Label2.Top) / (Label1.Left - Label2.Left); for x:= x2 downto x1 do begin y:= (Label1.Top - Label2.Top) / (Label1.Left - Label2.Left) * x + Label1.Top - (a * Label1.Left); Label2.Top:= y; Lavel2.Left:= x; End; Tilsvarende løkke hvis Label2.Left < Label1.Left, men ikke downto, og x1 bytter plass med x2 i løkkehodet. Siden dette skal skje med en beregning som skal gi en ny x-verdi i en timerprosedyre, må han istedenfor deklarere x og y globalt, og inkrementere eller dekrementere x i timerens OnTimer. Deretter beregne ny y-verdi og legge x og y som nye verdier til Label2 sin Left og Top henholdsvis i samme prosedyre. Da kan Label2 være hvor som helst på et skjema, og bevege seg mot Label1. Kollisjonstesten blir identisk som i innlegget ovenfor, og så kan maskinen stenges av ved å kalle opp en annen prosedyre, shutdown. Vel, det var det i full fart. Beklager evn. trykkfeil… Resten får konsept1 tygge litt på – litt mosjon for de små grå er vel bare sunt. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå