Schnaffen Skrevet 1. september 2003 Del Skrevet 1. september 2003 Hei sann... Jeg har laget en klasse slik: type TEnemy: class(TImage) end; //------------ var Form1: TForm1; Enemy: TEnemy; Åsså på OnFormCreate har jeg: var EnemyCount begin for EnemyCount := 0 to 10 do //Tror kansje jeg må ha en variabel i steden for 10 her hvis jeg skal telle opp antall fiender senere?... Enemy := TEnemy.Create; Enemy.Parent := Self; end; Og nå vil jeg at alle disse fiendene's left property skal økes med 1. HVORDAN????????? Hjelp meg :-? :-? :-? :-? [/b] Lenke til kommentar
Format71 Skrevet 1. september 2003 Del Skrevet 1. september 2003 Det du mangler er en liste med alle fiendene dine. Slik du har koden din nå har du kun referanse til en fiende - den siste du har opprettet. Forsøk noe slikt: const EnemyCount = 10; var EnemyList: TList; procedure OnCreate( ); var enemy: TImage; i: integer; begin EnemyList := TList.Create; for i := 0 to EnemyCount - 1 do begin enemy := TImage.Create(self); enemy.Parent := self; //Initier også andre ting - laste bilde osv... EnemyList.Add(enemy); end; end; procedure MoveEnemies; var i: integer; enemy: TImage; begin for i := 0 to EnemyList.Count - 1 do begin enemy := TImage(EnemyList[i]); enemy.LEft := enemyLeft + 1; end; end; Andre forslag: Lag en egen klasse, TEnemy, som har en image-property og en position-property. Da kan du få til at alle fiendene bruker samme bilde, så slipper du å bruke så mye minne. Du kan så bruke en TPaintBox eller noe slikt til å tegne fiendene på. (paintbox.draw(enemy.x, enemy.y, enemy.image) eller noe slikt...) Husk å frigjør alle fiendene dine også... -Vegar Lenke til kommentar
Schnaffen Skrevet 1. september 2003 Forfatter Del Skrevet 1. september 2003 Dødsbra!!! Takker så mye Lenke til kommentar
Schnaffen Skrevet 1. september 2003 Forfatter Del Skrevet 1. september 2003 Joda, dette funka bra det, men nå har jeg kommet til et nytt dillema... Min egen "hjemmelagde" kollisjonstesting funker ikke bah!!! Det som skjer er at hvis en Fiende har samme left, men langt i fra samme top og en annen motsatt så blir det kollisjon. Fatter det ikke... Min kolisjonstest: if (Enemy.Left+Enemy.Width > Spiller.Left) and (Enemy.Left < Spiller.Left+Spiller.Width) and (Enemy.Top+Enemy.Height > Spiller.Top) and (Enemy.Top < Spiller.Top+Spiller.height) then begin Kan noen se hva som er galt her. Det kan hende at jeg er helt på jorde, men så er jo klokka 24:00 på natta også da hehe :o Lenke til kommentar
Schnaffen Skrevet 1. september 2003 Forfatter Del Skrevet 1. september 2003 Glemte å si at dette selvfølgelig ligger i en for løkke slik: for i := 0 to EnemyCount-1 do begin enemy := TImage(EnemyList[i]); if (Enemy.Left+Enemy.Width > Spiller.Left) and (Enemy.Left < Spiller.Left+Spiller.Width) and (Enemy.Top+Enemy.Height > Spiller.Top) and (Enemy.Top < Spiller.Top+Spiller.height) then begin Lenke til kommentar
Format71 Skrevet 1. september 2003 Del Skrevet 1. september 2003 Hva med å bruke IntersectRect( ) fra Win32-api'et? Den tar inn tre rektangler - enemy, player og et tredje nytt rektangel som settes lik det rektangelet hvor de to første overlapper. I tillegg returnerer den 0 dersom de ikke overlapper. for i := 0 to enemies.count - 1 do begin if IntersectRect(intr, enemy.bounds, player.bounds) <> 0 then begin //Her blir det krig... end; end; Slå opp i hjelpa eller msdn.microsoft.com/library Der finner du også noen andre nyttige funksjoner. F.eks. 'PtInRect( )' mf. -Vegar Lenke til kommentar
Schnaffen Skrevet 2. september 2003 Forfatter Del Skrevet 2. september 2003 Sorry for min grønnhet, men jeg fikk det liksom ikke helt til... Enemy er TImage og det samme er Spiller og i IntersectRect() funker ikke enemy.bounds, men jeg får et forslag om enemy.BoundsRect?? Når du skriver: IntersectRect(intr.... har du da på forhånd deklarert "intr" som TRect, eller står det for noe annet? I såfall, må Intr bli "created" før jeg kan bruke det her??? Jeg føler meg litt sånn her nå: :oops: .......hehe Lenke til kommentar
Format71 Skrevet 2. september 2003 Del Skrevet 2. september 2003 Sorry... Gikk litt for fort. Riktig er boundsrect, ja. intr må deklareres som TRect ja. Siden dette er en record og ikke et object trenger du ikke å gjøre noe mere enn var intr: TRect; -Vegar Lenke til kommentar
dalai Skrevet 2. september 2003 Del Skrevet 2. september 2003 hva er en rect om jeg tør spørre? er ikke dette et objekt som alle andre med T foran? 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å