Fórum Function muito simples mais não sei pq ta errado #163943

31/05/2003

0

olha só fiz um procedure pra verificar colisão ele é o seguinte

Procedure verifica;
var x : byte;
begin
x:= 0;
if form1.BT1.Left > form1.BT2.Left + 75 then x:= 1;
if form1.BT1.Top > form1.BT2.Top + 25 then x:= 1;
if form1.BT1.Left + 75 < form1.BT2.Left then x:= 1;
if form1.BT1.Top + 25 < form1.BT2.Top  then x:= 1;
if x = 0 then form1.Canvas.TextOut(10,10,´colidiu´)
   else form1.Canvas.TextOut(10,10,´          ´);
//ou seja ele cercou o objeto e testa se eles não se tocam
// se todos os testes falharem é pq eles colidiram
end;

e um timer pra mover um coponente 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if getkeystate(vk_left)<0 then bt1.Left:=bt1.Left-2 ;
if getkeystate(vk_Right)<0 then bt1.Left:=bt1.Left+2;
if getkeystate(vk_up)<0 then bt1.top:=bt1.top-2;
if getkeystate(vk_down)<0 then bt1.top:=bt1.top+2;
verifica;
end;


essa primeira parte funcionou belezinha mais eu queria usar um function e puz assim

function verifica: boolean;
begin
if (form1.BT1.Left > form1.BT2.Left + 75) and
   (form1.BT1.Left + 75 < form1.BT2.Left) and
   (form1.BT1.Top + 25 < form1.BT2.Top ) and
   (form1.BT1.Top > form1.BT2.Top + 25) then result:= false;
end;

e pra chamar

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if getkeystate(vk_left)<0 then bt1.Left:=bt1.Left-2 ;
if getkeystate(vk_Right)<0 then bt1.Left:=bt1.Left+2;
if getkeystate(vk_up)<0 then bt1.top:=bt1.top-2;
if getkeystate(vk_down)<0 then bt1.top:=bt1.top+2;
verifica;
if verifica = false showmessage(´colidiu´);
end;

Complia mais não funciona o q está errado?


Robotizar

Robotizar

Responder

Posts

01/06/2003

Josecarlosjr_atc

Boa tarde,

Você está com um problema e acho que sei resolver.
Primeiro tente retirar todas as condicionais AND e colocar condicionais OR,pois o procedimento só irá funcionar com apenas uma condicional.
Resumindo, com condicionais AND, só se todas as possibilidades forem possivéis de uma só vez que ele executará, enquanto que com condicionais OR, só pelo menos uma delas for verdadeira ele executa o procedimento.
Aviso!!! Eu não estudei seu procedimento, más consegui resolver algo semelhante dessa maneira.

Valeu cara,

José Carlos Jr.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar