Bonjour,
Pour les utilisateurs de DELPHIX, certain on du remarquer que le test de collision en PIXELCHECK etait erronée. Surtout si vous utilisez la meme image ou (Surface) pour les sprites...
Avant toutes choses, il convient d'utiliser la class TImageSpriteEX pour les sprites animés.
Apres pour le bug en cas de meme Image, faites la correction si dessous :
Dans le cas contraire, la collision se fera uniquement en BoundRect.
Voila, suis pas pro, mais j'espere apporté une pierre a votre édifice :)
Meandcat
Source / Exemple :
Avant :
{ Pixel check !!! }
ddsd1.dwSize := SizeOf(ddsd1);
if suf1.Lock(r1, ddsd1) then
begin
try
ddsd2.dwSize := SizeOf(ddsd2);
if (suf1=suf2) or suf2.Lock(r2, ddsd2) then
begin
try
if suf1=suf2 then ddsd2 := ddsd1;
if ddsd1.ddpfPixelFormat.dwRGBBitCount<>ddsd2.ddpfPixelFormat.dwRGBBitCount then Exit;
{ Get transparent color }
.........
finally
if suf1<>suf2 then suf2.UnLock;
end;
end;
finally
suf1.UnLock;
end;
end;
Result := False;
end;
end; <----(End de la function)
Apres :
{ Pixel check !!! }
ddsd1.dwSize := SizeOf(ddsd1);
ddsd2.dwSize := SizeOf(ddsd2);
if not suf2.Lock(r2,ddsd2) then exit;
Suf2.UnLock;
if suf1.Lock(r1, ddsd1) then
try
if ddsd1.ddpfPixelFormat.dwRGBBitCount<>ddsd2.ddpfPixelFormat.dwRGBBitCount then Exit;
{ Get transparent color }
..............
finally
suf1.UnLock;
end;
Result := False;
end;
end; <---- (End de la function)
(entre nous, j'ai enlever le begin..end englobant le Try car ca sert a rien...)
Conclusion :
La derniere version que j'ai est la 2000 V2 remanier pour fonctionner sous Delphi 7. Si par hasard vous en connaissez une plus recente. Suis preneur :)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.