Gå til innhold

Flytte objekter av en klasse (trot jeg...)


Anbefalte innlegg

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
Videoannonse
Annonse

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

Joda, dette funka bra det, men nå har jeg kommet til et nytt dillema...

Min egen "hjemmelagde" kollisjonstesting funker ikke :lol: 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

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

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

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

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...