[ Remo @ 19.03.2006. 14:46 ] @
Treba mi pomoci ( kome ovde ne treba ), pravim igru u Delphiju, i to nesto na foru igre za mob Bounce, ali ne znam kako da uradim sledece stvari. U ovoj igri lopta nece skakutati, vec se samo kretati pomocu strelica na tastaturi, ali kao da uradim da kada Image2 ( Slika lopte ) dodje na odredjene kordinate da mi se npr. Image2 vrati na pocetnu poziciju?

[Ovu poruku je menjao Remo dana 19.03.2006. u 15:47 GMT+1]
[ Srki_82 @ 19.03.2006. 16:03 ] @
Ne bi trebalo da to bude tesko. Negde sacuvas koordinatu pocetne pozicije na koju zelis da vratis sliku. Recimo Pocetak: TPoint. Igras pomera sliku strelicama i Pozicija: TPoint se pomera. Kada se dodje do neke koorindate kada je potrebno vratiti sliku na pocetak uradis samo Pozicija := Pocetak i to je to.
[ Remo @ 20.03.2006. 08:44 ] @
Znaci:
u private stavim:
Pozicija: TPoint
Pocetak: TPoint


I sada tamo gde su definisano kako se Image2 krece postavim
if Image2. TPoint:= Pozicija
then Image2. TPoint:= Pocetak


Nesto na ovu foru?
Kako da definisem Pozicija i Pocetak
[ maricn @ 20.03.2006. 11:14 ] @
Citat:
Remo: Znaci:
u private stavim:
Pozicija: TPoint
Pocetak: TPoint


I sada tamo gde su definisano kako se Image2 krece postavim
if Image2. TPoint:= Pozicija
then Image2. TPoint:= Pocetak


Nesto na ovu foru?
Kako da definisem Pozicija i Pocetak

ne, nego:
if (image2.left = pozicija.x) and (image2.top = pozicija.y)
then begin
image2.left := pocetak.x;
image2.top := pocetak.y;
end;
...
recimo
p.s. u if naredbu ne stavljas := nego samo = ...
p.p.s. pocetak.x (po x osi) jednak je nuli na pocetku ekrana, a ne prozora programa, i to treba da se ubaci u kod, ali moras i ti nesto da se pomucis...
[ Remo @ 24.03.2006. 10:31 ] @
Code:

begin
  if (Image2.Left = 401) and (Image2.Top = 401)
    then begin
    Image2.Left := 80;
    Image2.Top := 80;
end;


Ovo sam otkucao u kodu ( Postavio ga u Event - OnKeyPress ) pokrenem igru ali kada dodjem na te koordinate, Image2 nastavlja da se krece kao da nema koda. Sta da radim?
[ Srki_82 @ 24.03.2006. 11:21 ] @
Verovatno ti se slicica ne nalazi na koordinati 401, 401. Po ovom kodu koji si napisao nije dovoljno da slicica samo ode skroz desno ili skroz dole. Mora da se nalazi bas u uglu 401, 401 da bi kod proradio. Ako zelis da se pozicija resetuje bilo da slicica ode skroz desno ili skroz levo onda ovako napisi uslov:

Code:
if (Image2.Left = 401) or (Image2.Top = 401)...


Pisem iz glave pa sam mozda nesto prevideo, ali mislim da je ovo u pitanju.
[ Nemanja Avramović @ 24.03.2006. 11:51 ] @
Mozda objekat ne pomeras po jedan piksel, pa se desi da preskochish koordinatu? Probaj da umesto = stavis >= odnosno:
Code:
begin
  if (Image2.Left >= 401) and (Image2.Top >= 401)
    then begin
    Image2.Left := 80;
    Image2.Top := 80;
end;
[ Remo @ 24.03.2006. 13:52 ] @
Code:

if (Image2.Left >= 400) and (Image2.Top >= 400)
  then begin
    Image2.Left := 80;
    Image2.Top := 80;
  end;


Mislim da bi kod trebao ovako da glasi, ali gde da ga stavim, da li u OnKeyPress ili private...?
[ badam @ 24.03.2006. 20:00 ] @
Obavezno stavi 'or' umesto 'and' i '>=' umesto '=', a tu proveru postavi odmah nakon pomeranja (znas gde si pomerio image2?)

[Ovu poruku je menjao badam dana 24.03.2006. u 21:44 GMT+1]
[ Remo @ 25.03.2006. 16:13 ] @
Citat:
badam: (znas gde si pomerio image2?)


Na sta mislis, ne razumem pitanje?
[ Srki_82 @ 27.03.2006. 15:29 ] @
Mislio je da ti znas gde u kodu pomeras svoj objekta. I cim ga pomeris proveri da li je sve ok... znaci
Code:
Pomeri
Proveri poziciju i resetuj ako treba
[ Remo @ 27.03.2006. 19:56 ] @
Code:

begin
  Form1.DoubleBuffered:=true;
    case key of
    37: Image2.Left:=Image2.Left-5;{levo}
    38: Image2.Top:=Image2.Top-5;{gore}
    39: Image2.Left:=Image2.Left+5;{desno}
    40: Image2.Top:=Image2.Top+5;{dole}
  end;

end;

  if (Image2.Left = 401) and (Image2.Top = 401)
    then begin
    Image2.Left := 80;
    Image2.Top := 80;
end;

E ovako meni glasi kod, pokrenem igru, ali kao da nema ovog drugog dela
[ badam @ 27.03.2006. 20:42 ] @
Stavio si ga iza end od procedure (pretpostavljam).

Code:

begin
  Form1.DoubleBuffered:=true;
    case key of
    37: Image2.Left:=Image2.Left-5;{levo}
    38: Image2.Top:=Image2.Top-5;{gore}
    39: Image2.Left:=Image2.Left+5;{desno}
    40: Image2.Top:=Image2.Top+5;{dole}
  end;
  if (Image2.Left >= 401) or (Image2.Top >= 401)
    then begin
    Image2.Left := 80;
    Image2.Top := 80;
  end;

end;


Ponovo: obavezno or i >=.
[ Bojan Kopanja @ 27.03.2006. 22:17 ] @
Pa ne mora obavezno "or" moze i sa "and" ako hoce da mu se ova uslova obavezno ostvare pre resetovanja, ali ">=" svakako treba...
[ badam @ 27.03.2006. 22:54 ] @
U stvari mu treba (pretpostavljam):
Code:

  if Image2.Left >= 401 then 
    Image2.Left := 80;
  if Image2.Top >= 401 then 
    Image2.Top := 80;
[ Remo @ 28.03.2006. 13:49 ] @
E bas mi je to trebalo sada radi!!!
Ali imam novo pitanje :)
Lopta kada ide nekim pravcem i naidje na neku koordinatu ( manju od 401 Left i Top ), dok se ona krece, na primer naleti na zid, e sada taj zid treba da je zaustavi i da se ona ne pomeri koliko god ja da pritiskam u desno ( ili levo ). Odnosno da ostane na istom polozaju gde udari i zid. Znam da je malo grubo objasnjenje, ako nije jasno pitajte!
[ badam @ 28.03.2006. 14:00 ] @
Code:

  if Image2.Left >= 401 then 
    Image2.Left := 401;
  if Image2.Top >= 401 then 
    Image2.Top := 401;
  if Image2.Left <= 80 then 
    Image2.Left := 80;
  if Image2.Top <= 80 then 
    Image2.Top := 80;
[ badam @ 28.03.2006. 14:08 ] @
Pardon. Sad sam video da pomeras lopticu za po pet pixela. Sa prethodnim kodom dobio bi skakutanje loptice u mestu,
potrebna je provera pre pomeranja.
Code:

begin
  Form1.DoubleBuffered:=true;
  case key of
    37: if (Image2.Left-5)>80 then
            Image2.Left:=Image2.Left-5
          else
            Image2.Left:=80;          
    38: if (Image2.Top-5)>80 then
            Image2.Top:=Image2.Top-5
         else
            Immage2.Top:=80
    39: if (Image2.Left+5)<401 then
            Image2.Left:=Image2.Left+5
         else
            Image2.Left:=401;
    40: if (Image2.Top+5)<401 then
            Image2.Top:=Image2.Top+5
         else
            Image2.Top:=401
  end;
[ Remo @ 28.03.2006. 15:22 ] @
Ne, ne, nisi shvatio ( ja sam kriv - lose sam objasnio )

npr.
Loptica ide

----> | ( crtica je zid, a strelica je loptica )

kada loptica dodje do zida...
------->|
...tu da stane i da ne ide dalje u desno, nadam se da si shvatio. ( naravno da se loptica normalno krece u ostalim pravcima )

npr2.
_ _ _ _ _ _
|_|_|_|_|_|
|_|_|_| <--(loptica)---------
|_|_|_ _ _
|_|_|_|_|_|




------------


_ _ _ _ _ _
|_|_|_|_|_|
|_|_|_|<--(loptica)---------
|_|_|_ _ _
|_|_|_|_|_|

Kada je lopta dosla da ne moze da prelazi preko kockica ( kockice su kao zid ), ali da moze da se vrati dole, ili ide gore...
[ badam @ 28.03.2006. 15:47 ] @
Da, problem je verovatno u tome što nisam igrao Bounce (ne znam ni kako izgleda). Taj problem bi mogao da rešiš tako što ćeš pri pomeranju levo proveriti boju pet pixela u levo od loptice (pretpostavke: boja zida je bela; image2 se krece preko image1 koji je lavirint)
Code:

var i,KolkoMoze:integer;
begin
  KolkoMoze:=0;
  case Key of
     37: begin
            for i:=1 to 5 do
              if Image1.Canvas.Pixels[Image2.Canvas.Left-i,Image2.Canvas.Top]<>clWhite then
                KolkoMoze:=i
              else
                break;
            Image2.Left:=Image2.Left-KolkoMoze
          end;
     38:...;
     39:...;
     40:...;
     41:...
  end
end;

Kuco sam u direktno ovde, pa nije isprobano, ali trebalo bi da radi.
Pozdrav

[Ovu poruku je menjao badam dana 28.03.2006. u 16:49 GMT+1]
[ Srki_82 @ 28.03.2006. 16:01 ] @
Pisao sam par jednostavnih igara u temi

http://www.elitesecurity.org/t...adno-pa-sam-napravio-malu-igru

Imas jednu u kojoj se igrac krece kroz lavirint i treba da gura kuglice. Mozda je to ono sto ti treba bar kada je kretanje u pitanju.
[ Remo @ 28.03.2006. 22:18 ] @
@badam
Nije losa ideja, kada bih radio svaku kocku posebno, ali je kod mene to sve jedna mreza 400x400 napravljena u Paintu.
Mada bih mogao da promenim da ne bude mreza vec da imam par elemenata npr Imagea
[ badam @ 28.03.2006. 23:34 ] @
Ovaj kod sam probao sa lavirintom nacrtanim u Paintu. Ucitan je u Image1. Image1 left i top treba da su 0, a ako ne, potrebno je preracunati.
Code:

function TForm1.proveri(smer:integer):integer;
var i,j:integer;
    Moze:Boolean;
begin
  Result:=0;
  Moze:=False;
  case smer of
    1:begin          //Levo
      for i:=1 to 5 do
      begin
        for j:=Image2.Top to Image2.Top+Image2.Height do
        begin
          if Image1.Canvas.Pixels[Image2.left-i,j]<>clWhite then
            Moze:=True
          else
          begin
            Moze:=False;
            break
          end
        end;
          if Moze then
            Result:=i
          else
            break
      end
    end;
    2:begin                //Gore
      for i:=1 to 5 do
      begin
        for j:=Image2.Left to Image2.Left+Image2.Width do
        begin
          if Image1.Canvas.Pixels[j,Image2.Top-i]<>clWhite then
            Moze:=True
          else
          begin
            Moze:=False;
            break
          end
        end;
        if Moze then
          Result:=i
        else
          break
      end
    end;
    3:begin          //Desno
      for i:=1 to 5 do
      begin
        for j:=Image2.Top to Image2.Top+Image2.Height do
        begin
          if Image1.Canvas.Pixels[Image2.left+Image2.Width+i,j]<>clWhite then
            Moze:=True
          else
          begin
            Moze:=False;
            break
          end
        end;
          if Moze then
            Result:=i
          else
            break
      end
    end;
    4:begin                //Dole
      for i:=1 to 5 do
      begin
        for j:=Image2.Left to Image2.Left+Image2.Width do
        begin
          if Image1.Canvas.Pixels[j,Image2.Top+Image2.Height+i]<>clWhite then
            Moze:=True
          else
          begin
            Moze:=False;
            break
          end
        end;
        if Moze then
          Result:=i
        else
          break
      end
    end
  end
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  DoubleBuffered:=True;
  case Key of
     37: Image2.Left:=Image2.Left-proveri(1);
     38: Image2.Top:=Image2.Top-proveri(2);
     39: Image2.Left:=Image2.Left+proveri(3);
     40: Image2.Top:=Image2.Top+proveri(4);
  end;
  if Image2.Top>395 then
    image2.Top:=-5;
  if image2.Left>395 then
    Image2.Left:=-5;
  if Image2.Top<-5 then
    image2.Top:=395;
  if image2.Left<-5 then
    Image2.Left:=395
end;