Sayfayı Yazdır | Pencereyi Kapat

Arka Plan Hareket

Nereden Yazdırıldığı: Clomosy | Forum
Kategori: Genel Programlama
Forum Adı: Genel İşlemler
Forum Tanımlaması: TRObject dili ile programlama yaparken karşılaşılan genel işlemler
URL: https://forum.clomosy.com.tr/forum_posts.asp?TID=548
Tarih: 06 Ocak 2025 Saat 14:08
Program Versiyonu: Web Wiz Forums 12.07 - https://www.webwizforums.com


Konu: Arka Plan Hareket
Mesajı Yazan: ibrahimethem
Konu: Arka Plan Hareket
Mesaj Tarihi: 04 Ağustos 2023 Saat 09:44
Arka planın hareketi için animasyon kullanmamı söylemiştiniz ama animasyon ile yapamadım daha farklı bir yöntem var  mı ?



Cevaplar:
Mesajı Yazan: Alforce
Mesaj Tarihi: 04 Ağustos 2023 Saat 10:12
https://forum.clomosy.com.tr/arka-plan-hareket_topic546_post655.html#655" rel="nofollow - Burda .


Mesajı Yazan: ibrahimethem
Mesaj Tarihi: 04 Ağustos 2023 Saat 14:40
Şuan arka plan haraketlinde bir sorun olmuyor ama engelleri Y eksenine eksi koymama rağmen eksende aşağı doğru kaymıyor bunun için ne yapabilirim ?


Mesajı Yazan: Alforce
Mesaj Tarihi: 07 Ağustos 2023 Saat 09:13
Orjinalini yazan: ibrahimethem ibrahimethem Yazdı:

Y eksenine eksi koymama rağmen eksende aşağı doğru kaymıyor
Aşşağı doğu kaymak yerine ne yaptığını anlatırsanız sorununuz daha kolay anlaşılır.

Bir timerın OnTimer olayına bunu koymak nasıl çalışır?:
Nesne.Top:= Nesne.Top+10;
Bunun nesneyi aşşağı doğru hareket etmesi gerekir.


Yada belki nesne bir yere bağlı olabilir, bu durumda bu kod onu serbest bırakır:
Nesne.Align:= alNone;


Mesajı Yazan: ibrahimethem
Mesaj Tarihi: 07 Ağustos 2023 Saat 09:47
Yol arka planda kaydığı ve engellerimin de random olarak geldiği için engelleri konumlandıramıyorum bu yüzden aracıma vurduğu zaman algılamıyor bunun algılaması için ne yapabilirim ?


Mesajı Yazan: Alforce
Mesaj Tarihi: 07 Ağustos 2023 Saat 11:26
İkisinin alanını kıyaslayabilirsiniz.

Örnek bir kod:
if
  (Araba.Top <= Engel.Top+Engel.Height) or
  (Araba.Top+Araba.Height >= Engel.Top) or
  (Araba.Left <= Engel.Left+Engel.Width) or
  (Araba.Left+Araba.Width >= Engel.Left)
then
Begin
  // Engele dokanıldı
End;
Bu, iki nesnenin kesişip kesişmediğini hesaplar.
Bunu bütün engeller için doğrulayın.


Mesajı Yazan: ibrahimethem
Mesaj Tarihi: 07 Ağustos 2023 Saat 13:33
var
MyForm:TclGameForm;
rightbutton, leftbutton : TClProButton;
testImg,engel1img,engelimg,engel2img: TClProImage;
GameTimer,Timer,GameTimer1,GameTimer2,GameTimer3:TClTimer;
 b: Boolean;


  Procedure Proc4OnGameTimer;
  Const 
    engel2imgSpeed= -10;
  begin
          engel2img.Align := alNone; 
           engel2img.Position.Y := engel2img.Position.Y - engel2imgSpeed;//Move up
      
      if (engel2img.Position.X + engel2img.Width) > TForm(MyForm).ClientWidth then  // Form Right border control
        engel2img.Position.X := TForm(MyForm).ClientWidth - engel2img.Width;
    
      if (engel2img.Position.X) < 0 then // Left border control
        engel2img.Position.X := 0;

      if (engel2img.Position.Y + engel2img.Height) > TForm(MyForm).ClientHeight then  // Form Bottom border control
          begin
        engel2img.Position.Y := TForm(MyForm).ClientHeight - engel2img.Height;
        engel2img.Position.Y := 0;
        engel2img.Position.X:= clMath.generateRandom(150,250);
      end;
      
  if engel2img then
      GameTimer.Enabled := True;
 end;
 
 
 Procedure Proc2OnGameTimer;
  Const 
    engel1imgSpeed= -10;
  begin
          engel1img.Align := alNone; 
           engel1img.Position.Y := engel1img.Position.Y - engel1imgSpeed;//Move up
      
      if (engel1img.Position.X + engel1img.Width) > TForm(MyForm).ClientWidth then  // Form Right border control
        engel1img.Position.X := TForm(MyForm).ClientWidth - engel1img.Width;
    
      if (engel1img.Position.X) < 0 then // Left border control
        engel1img.Position.X := 0;

      if (engel1img.Position.Y + engel1img.Height) > TForm(MyForm).ClientHeight then  // Form Bottom border control
          begin
        engel1img.Position.Y := TForm(MyForm).ClientHeight - engel1img.Height;
        engel1img.Position.Y := 0;
        engel1img.Position.X:= clMath.generateRandom(50,150);
      end;
      
  if engel1img then
      GameTimer.Enabled := True;
 end;
 
 
 Procedure Proc3OnGameTimer;
  Const 
    engelimgSpeed = -10;
  begin
            engelimg.Align := alNone; 
            engelimg.Position.Y := engelimg.Position.Y - engelimgSpeed;//Move up
      
      if (engelimg.Position.X + engelimg.Width) > TForm(MyForm).ClientWidth then  // Form Right border control
        engelimg.Position.X := TForm(MyForm).ClientWidth - engelimg.Width;
    
      if (engelimg.Position.X) < 0 then // Left border control
        engelimg.Position.X := 0;

      if (engelimg.Position.Y + engelimg.Height) > TForm(MyForm).ClientHeight then  // Form Bottom border control
      begin
        engelimg.Position.Y := TForm(MyForm).ClientHeight - engelimg.Height;
        engelimg.Position.Y := 0;
        engelimg.Position.X:= clMath.generateRandom(0,100);
      end;
      
      if engelimg then
      GameTimer.Enabled := True;
 end;
  

   procedure SetImage3;
begin
 engel2img := MyForm.AddNewProImage(MyForm,'engel2img');
 clComponent.SetupComponent(engel2img,'{"MarginBottom":600,"Width" :150, "MarginLeft":250, "Height":150,"RoundHeight":10,"RoundWidth":10,
 "ImgUrl":"https://i.hizliresim.com/io5ymz8.png", "ImgFit":"yes"}');
end;
  
  procedure SetImage2;
begin
 engel1img := MyForm.AddNewProImage(MyForm,'engel1img');
 clComponent.SetupComponent(engel1img,'{"MarginBottom":300,"Width" :150, "MarginRight":250, "Height":150,"RoundHeight":10,"RoundWidth":10,
 "ImgUrl":"https://i.hizliresim.com/dbtk62n.png", "ImgFit":"yes"}');
end;
 
 
 procedure SetImage1;
begin
 engelimg := MyForm.AddNewProImage(MyForm,'engelimg');
 clComponent.SetupComponent(engelimg,'{"MarginBottom":-50,"Width" :150, "MarginLeft":250, "Height":150,"RoundHeight":10,"RoundWidth":10,
 "ImgUrl":"https://i.hizliresim.com/8lnv0rh.png", "ImgFit":"yes"}');
end;

 
 Procedure Proc1OnGameTimer;
begin
  if b then
    MyForm.SetFormBGImage('c4gxsvt.png')
  else
    MyForm.SetFormBGImage('anhjtzn.png');
  
  b:= not b;
End;

  Procedure ProcOnGameTimer;
  Const 
    testImgSpeed = 0;
  begin
    
    testImg.Position.Y := testImg.Position.Y - testImgSpeed;//Move up
      
      if (testImg.Position.X + testImg.Width) > TForm(MyForm).ClientWidth then  // Form Right border control
        testImg.Position.X := TForm(MyForm).ClientWidth - testImg.Width;
    
      if (testImg.Position.X) < 0 then // Left border control
        testImg.Position.X := 0;

      if (testImg.Position.Y + testImg.Height) > TForm(MyForm).ClientHeight then  // Form Bottom border control
        testImg.Position.Y := TForm(MyForm).ClientHeight - testImg.Height;
      
      if testImg then
      GameTimer.Enabled := True;
      
        
  end; 

 procedure rightbuttonOnClick;
 begin 
  testImg.Align := alNone;
  testImg.Position.X  :=  testImg.Position.X + 25;
 end;
 
 procedure leftbuttonOnClick;
 begin
  testImg.Align := alNone;
  testImg.Position.X  :=  testImg.Position.X - 25;
 end;

procedure SetImage;
begin
 testImg := MyForm.AddNewProImage(MyForm,'testImg');
 clComponent.SetupComponent(testImg,'{"MarginBottom":-450,"Width" :150, "Height":150,"RoundHeight":10,"RoundWidth":10,
 "ImgUrl":"https://1.bp.blogspot.com/-eLqVU9iD9EM/WsoJrp3VRaI/AAAAAAAABjo/QH1WGuxqG1Y24swMOrKAZUZzSl8ScXXWgCLcBGAs/s1600/araba.png", "ImgFit":"yes"}');


end;

begin
 b:= False;
MyForm := TclGameForm.Create(Self);
MyForm.AddGameAssetFromUrl('https://i.hizliresim.com/c4gxsvt.png');
MyForm.AddGameAssetFromUrl('https://i.hizliresim.com/anhjtzn.png');


 rightbutton := MyForm.AddNewProButton(MyForm,'rightbutton','');
 clComponent.SetupComponent(rightbutton,'{"caption":" ", "MarginBottom":-700, "Width" :200,"MarginLeft":275, 
"Height":70,"RoundHeight":2,
 "RoundWidth":2}');
 MyForm.SetImage(rightbutton,'https://i.hizliresim.com/rctnzmd.png'); 
 MyForm.AddNewEvent(rightbutton,tbeOnClick,'rightbuttonOnClick');



leftbutton := MyForm.AddNewProButton(MyForm,'leftbutton','');
 clComponent.SetupComponent(leftbutton,'{"caption":" ",  "MarginBottom":-700,  "Width" :200,"MarginRight":300, 
"Height":70,"RoundHeight":2,
 "RoundWidth":2}');
 MyForm.SetImage(leftbutton,'https://i.hizliresim.com/t73pt83.png'); 
 MyForm.AddNewEvent(leftbutton,tbeOnClick,'leftbuttonOnClick');

Timer:= MyForm.AddNewTimer(MyForm,'timer',100);
Timer.Enabled:= True;  
MyForm.AddNewEvent(Timer,tbeOnTimer,'Proc1OnGameTimer');

 GameTimer:= MyForm.AddNewTimer(MyForm,'GameTimer',1000);
 GameTimer.Interval := 100;
 GameTimer.Enabled := True;
 MyForm.AddNewEvent(GameTimer,tbeOnTimer,'ProcOnGameTimer');
 
 GameTimer2:= MyForm.AddNewTimer(MyForm,'GameTimer2',1000);
  GameTimer2.Interval := 100;
  GameTimer2.Enabled := True;
  MyForm.AddNewEvent(GameTimer2,tbeOnTimer,'Proc2OnGameTimer');
  
  GameTimer1:= MyForm.AddNewTimer(MyForm,'GameTimer1',1000);
  GameTimer1.Interval := 100;
  GameTimer1.Enabled := True;
  MyForm.AddNewEvent(GameTimer1,tbeOnTimer,'Proc3OnGameTimer');

  GameTimer3:= MyForm.AddNewTimer(MyForm,'GameTimer3',1000);
  GameTimer3.Interval := 100;
  GameTimer3.Enabled := True;
  MyForm.AddNewEvent(GameTimer3,tbeOnTimer,'Proc4OnGameTimer');

SetImage3;
SetImage2;
SetImage1;
SetImage;
MyForm.Run;

end;


Kodum şu şekilde attığınız kodu engelin içinde de denedim ayrı olarak ana arabam olan (testimg) içinde de denedim oyun ekranı açılmasına rağmen kod devreye girmiyor. Ayrı bir yere yapıştırdığımda ise direkt olarak hata alıyorum sebebi nedir sizce ?


Mesajı Yazan: Alforce
Mesaj Tarihi: 07 Ağustos 2023 Saat 15:57
Bu umarım işinizi görür:
Var
  MyForm:TclGameForm;
  rightbutton, leftbutton : TClProButton;
  testImg,engel1img,engelimg,engel2img: TClProImage;
  GameTimer,Timer,GameTimer1,GameTimer2,GameTimer3:TClTimer;
  b: Boolean;

Procedure Proc4OnGameTimer;
Const 
  engel2imgSpeed = -10;
begin
  engel2img.Align:= alNone; 
  engel2img.Top := engel2img.Top - engel2imgSpeed;//Move up
  
  if (engel2img.Left + engel2img.Width) > TForm(MyForm).ClientWidth then  // Form Right border control
    engel2img.Left := TForm(MyForm).ClientWidth - engel2img.Width;
  
  if (engel2img.Left) < 0 then // Left border control
    engel2img.Left := 0;
  
  if (engel2img.Top + engel2img.Height) > TForm(MyForm).ClientHeight then  // Form Bottom border control
  begin
    engel2img.Top := TForm(MyForm).ClientHeight - engel2img.Height;
    engel2img.Top := 0;
    engel2img.Left:= clMath.generateRandom(150,250);
  end;
  
  if engel2img then
    GameTimer.Enabled:= True;
end;

Procedure Proc2OnGameTimer;
Const 
  engel1imgSpeed= -10;
begin
  engel1img.Align := alNone; 
  engel1img.Top := engel1img.Top - engel1imgSpeed;//Move up
  
  if (engel1img.Left + engel1img.Width) > TForm(MyForm).ClientWidth then  // Form Right border control
    engel1img.Left := TForm(MyForm).ClientWidth - engel1img.Width;
  
  if (engel1img.Left) < 0 then // Left border control
    engel1img.Left := 0;
    
  if (engel1img.Top + engel1img.Height) > TForm(MyForm).ClientHeight then  // Form Bottom border control
  begin
    engel1img.Top := TForm(MyForm).ClientHeight - engel1img.Height;
    engel1img.Top := 0;
    engel1img.Left:= clMath.generateRandom(50,150);
  end;
  
  if engel1img then
    GameTimer.Enabled:= True;
end;

Procedure Proc3OnGameTimer;
Const 
  engelimgSpeed = -10;
begin
  engelimg.Align := alNone; 
  engelimg.Top := engelimg.Top - engelimgSpeed;//Move up

  if (engelimg.Left + engelimg.Width) > TForm(MyForm).ClientWidth then  // Form Right border control
    engelimg.Left := TForm(MyForm).ClientWidth - engelimg.Width;

  if (engelimg.Left) < 0 then // Left border control
    engelimg.Left := 0;

  if (engelimg.Top + engelimg.Height) > TForm(MyForm).ClientHeight then  // Form Bottom border control
  begin
    engelimg.Top := TForm(MyForm).ClientHeight - engelimg.Height;
    engelimg.Top := 0;
    engelimg.Left:= clMath.generateRandom(0,100);
  end;

  if engelimg then
    GameTimer.Enabled:= True;
end;

procedure SetImage3;
begin
  engel2img := MyForm.AddNewProImage(MyForm,'engel2img');
  clComponent.SetupComponent(engel2img,'{"Width":75, "Height":150, "Align":"None",
  "ImgUrl":"https://i.hizliresim.com/io5ymz8.png", "Left": 60, "Top": 0}');
end;

procedure SetImage2;
begin
  engel1img := MyForm.AddNewProImage(MyForm,'engel1img');
  clComponent.SetupComponent(engel1img,'{"Width":75, "Height":150, "Align":"None",
  "ImgUrl":"https://i.hizliresim.com/p1uujvb.png", "Left": 0, "Top": 30}');
end;

procedure SetImage1;
begin
  engelimg:= MyForm.AddNewProImage(MyForm,'engelimg');
  clComponent.SetupComponent(engelimg,'{"Width":75, "Height":150, "Align":"None",
  "ImgUrl":"https://i.hizliresim.com/rr72hin.png", "Left": 30, "Top": 10}');
end;

Function Max(in1,in2: Integer): Integer; begin

  if in1 >= in2 then
    Result:= in1
  else
    Result:= in2;
End;

Function Min(in1,in2: Integer): Integer; begin

  if in1 <= in2 then
    Result:= in1
  else
    Result:= in2;
End;

// Change background
Procedure Proc1OnGameTimer; begin

  if b then
    MyForm.SetFormBGImage('c4gxsvt.png')
  else
    MyForm.SetFormBGImage('anhjtzn.png');
  
  b:= not b;
End;

Procedure ProcOnGameTimer;
Const 
  testImgSpeed = 0;
Var
  intersect_area,intersect_x1, intersect_y1, intersect_x2, intersect_y2: Integer;
  b: Boolean;
begin
  testImg.Top := testImg.Top - testImgSpeed;//Move up
  
  if (testImg.Left + testImg.Width) > TForm(MyForm).ClientWidth then  // Form Right border control
    testImg.Left := TForm(MyForm).ClientWidth - testImg.Width;
  
  if (testImg.Left) < 0 then // Left border control
    testImg.Left := 0;
  
  if (testImg.Top + testImg.Height) > TForm(MyForm).ClientHeight then  // Form Bottom border control
    testImg.Top := TForm(MyForm).ClientHeight - testImg.Height;
  
  if testImg then
  GameTimer.Enabled := True;
  
  b:= False;
  
  {Engel}
  intersect_x1:= max(testImg.Left, engelimg.Left);
  intersect_y1:= max(testImg.Top, engelimg.Top);
  intersect_x2:= min(testImg.Left+testImg.Width, engelimg.Left+engelimg.Width);
  intersect_y2:= min(testImg.Top+testImg.Height, engelimg.Top+engelimg.Height);
  intersect_area:= (intersect_x2 - intersect_x1) * (intersect_y2 - intersect_y1);
  
  b:= b or (intersect_area > 0) and (testImg.Top < engelimg.Top+engelimg.Height);
  {/Engel}
  
  {Engel1}
  intersect_x1:= max(testImg.Left, engel1img.Left);
  intersect_y1:= max(testImg.Top, engel1img.Top);
  intersect_x2:= min(testImg.Left+testImg.Width, engel1img.Left+engel1img.Width);
  intersect_y2:= min(testImg.Top+testImg.Height, engel1img.Top+engel1img.Height);
  intersect_area:= (intersect_x2 - intersect_x1) * (intersect_y2 - intersect_y1);
  
  b:= b or (intersect_area > 0) and (testImg.Top < engel1img.Top+engel1img.Height);
  {/Engel1}
  
  {Engel2}
  intersect_x1:= max(testImg.Left, engel2img.Left);
  intersect_y1:= max(testImg.Top, engel2img.Top);
  intersect_x2:= min(testImg.Left+testImg.Width, engel2img.Left+engel2img.Width);
  intersect_y2:= min(testImg.Top+testImg.Height, engel2img.Top+engel2img.Height);
  intersect_area:= (intersect_x2 - intersect_x1) * (intersect_y2 - intersect_y1);
  
  b:= b or (intersect_area > 0) and (testImg.Top < engel2img.Top+engel2img.Height);
  {/Engel2}
  
  
  if b then
  Begin
    ShowMessage('Engele dokanıldı');
    engelimg.Top:= 1;
    engel1img.Top:= 1;
    engel2img.Top:= 1;
  End;
end; 

procedure rightbuttonOnClick;
Begin
  testImg.Align := alNone;
  testImg.Left:= testImg.Left +25;
end;
 
procedure leftbuttonOnClick;
Begin
  testImg.Align := alNone;
  testImg.Left:= testImg.Left -25;
end;

procedure SetImage;
begin
  testImg := MyForm.AddNewProImage(MyForm,'testImg');
  clComponent.SetupComponent(testImg,'{"MarginBottom":-450,"Width" :75, "Height":150,
 "ImgUrl":"https://1.bp.blogspot.com/-eLqVU9iD9EM/WsoJrp3VRaI/AAAAAAAABjo/QH1WGuxqG1Y24swMOrKAZUZzSl8ScXXWgCLcBGAs/s1600/araba.png", "ImgFit":"yes"}');
end;

begin
  b:= False;
  MyForm := TclGameForm.Create(Self);
  MyForm.AddGameAssetFromUrl('https://i.hizliresim.com/c4gxsvt.png');
  MyForm.AddGameAssetFromUrl('https://i.hizliresim.com/anhjtzn.png');
  
  
  rightbutton := MyForm.AddNewProButton(MyForm,'rightbutton','');
  clComponent.SetupComponent(rightbutton,'{"caption":" ", "MarginBottom":-700, "Width" :200,"MarginLeft":275, 
  "Height":70,"RoundHeight":2,
  "RoundWidth":2}');
  MyForm.SetImage(rightbutton,'https://i.hizliresim.com/rctnzmd.png'); 
  MyForm.AddNewEvent(rightbutton,tbeOnClick,'rightbuttonOnClick');
  
  
  
  leftbutton := MyForm.AddNewProButton(MyForm,'leftbutton','');
  clComponent.SetupComponent(leftbutton,'{"caption":" ",  "MarginBottom":-700,  "Width" :200,"MarginRight":300, 
  "Height":70,"RoundHeight":2,
  "RoundWidth":2}');
  MyForm.SetImage(leftbutton,'https://i.hizliresim.com/t73pt83.png'); 
  MyForm.AddNewEvent(leftbutton,tbeOnClick,'leftbuttonOnClick');
  
  Timer:= MyForm.AddNewTimer(MyForm,'timer',100);
  Timer.Enabled:= True;  
  MyForm.AddNewEvent(Timer,tbeOnTimer,'Proc1OnGameTimer');
  
  GameTimer:= MyForm.AddNewTimer(MyForm,'GameTimer',1000);
  GameTimer.Interval := 100;
  GameTimer.Enabled := True;
  MyForm.AddNewEvent(GameTimer,tbeOnTimer,'ProcOnGameTimer');
  
  GameTimer2:= MyForm.AddNewTimer(MyForm,'GameTimer2',1000);
  GameTimer2.Interval := 100;
  GameTimer2.Enabled := True;
  MyForm.AddNewEvent(GameTimer2,tbeOnTimer,'Proc2OnGameTimer');
  
  GameTimer1:= MyForm.AddNewTimer(MyForm,'GameTimer1',1000);
  GameTimer1.Interval := 100;
  GameTimer1.Enabled := True;
  MyForm.AddNewEvent(GameTimer1,tbeOnTimer,'Proc3OnGameTimer');
  
  GameTimer3:= MyForm.AddNewTimer(MyForm,'GameTimer3',1000);
  GameTimer3.Interval := 100;
  GameTimer3.Enabled := True;
  MyForm.AddNewEvent(GameTimer3,tbeOnTimer,'Proc4OnGameTimer');

  SetImage3;
  SetImage2;
  SetImage1;
  SetImage;
  MyForm.Run;
end;



Sayfayı Yazdır | Pencereyi Kapat

Forum Software by Web Wiz Forums® version 12.07 - https://www.webwizforums.com
Copyright ©2001-2024 Web Wiz Ltd. - https://www.webwiz.net