Volledige versie bekijken : [ DISCUSSIE ] Hittest
ninetynine
%Europe/Berlin %857 %2005, 21:35
Daar er nogal veel gevraagd wordt naar hittest, (en na een eerste reactie van the dutch :) na het zien van dit artikel):
Dank je wel man! Deze had ik nog niet in werking gezien. Wel had ik de BitmapData.hitTest() gezien maar nog niet mee gerommelt .
Nou weer een probleem de wereld uit geholpen door onze vrienden bij Macromedia.
Is die verbeterd met de komst van Flash 8.0 ??
Ik kwam een tijdje geleden dit hier tegen :
http://www.gskinner.com/blog/archives/2005/08/flash_8_shape_b.html
Het ziet er allemaal toch goed uit, de hittest is shaped based
of is dit illusie ?
Of het wachten op een betere hittest voor flash 9.0 of AS 3.0 ???
Spuug hier uw gal :)
http://www.gskinner.com//blog/assets/CDTest.swf
Ohja en als er iemand al ervaring heeft met die soort hittest ,
msschn een korte uitleg ? :)
Dauntless
%Europe/Berlin %872 %2005, 21:55
Cool :). (Over)Morgen een clasje maken zodat er wel degelijk een shapeHitTest is of zo :D
SaphuA
%Europe/Berlin %887 %2005, 22:18
Oke,
Zoals gevraagd in het andere post; hier een mega snel in elkaar gezette voorbeeld van de oude manier van de anyshape hitTest. Het is enorm buggy, maar het is om te laten zien hoe het precies werkt, en wat het idee erachter is. Het is met een beetje denkwerk vrij makkelijk om te bouwen naar een echte sidescroller.
Denk wel, dat deze manier while-loops gebruikt, zorg dus dat deze niet altijd true zijn (door een of adnere fout) want dan loopt je Flashplayer vast.
Ik zou zeggen; meet Chung Muau
Edit: Ik zal binnekort eens even kijken of dit in Flash 8 inderdaan verbetrd is (wat naar ik vernomen heb wel gebeurd is).
TheDutch
%Europe/Berlin %891 %2005, 22:23
Sorry hoor SaphuA, maar hier overtuig je mij niet mee :D.
Ik zie graag een simpele opzet van wat een aantal apart uitziende shapes die je kunt testen door ze over elkaar te dragen en op die manier een hit te creeëren, op zo'n manier dat het bruikbaar is voor meer situaties.
TheDutch
%Europe/Berlin %892 %2005, 22:25
De class die gebruikt wordt binnen de CDTest.swf :).
Het valt me op dat ik geen BitmapData.hitTest() zie...
class CollisionDetection
{
var xMin, xMax, yMin, yMax;
var blah;
function CollisionDetection()
{
} // End of the function
static function checkForCollision(p_clip1, p_clip2, p_alphaTolerance, p_scope)
{
if (p_alphaTolerance == undefined)
{
var _l11 = 255;
} // end if
if (p_scope == undefined)
{
var _l10 = _root;
} // end if
var _l4 = p_clip1.getBounds(_l10);
var _l3 = p_clip2.getBounds(_l10);
if (_l4.xMax < _l3.xMin || _l3.xMax < _l4.xMin || (_l4.yMax < _l3.yMin || _l3.yMax < _l4.yMin))
{
return(null);
} // end if
var _l2 = {};
xMin = Math.max(_l4.xMin, _l3.xMin);
xMax = Math.min(_l4.xMax, _l3.xMax);
yMin = Math.max(_l4.yMin, _l3.yMin);
yMax = Math.min(_l4.yMax, _l3.yMax);
var _l7 = new flash.display.BitmapData(_l2.xMax - _l2.xMin, _l2.yMax - _l2.yMin, false);
var _l5 = p_clip1.transform.matrix;
_l5.tx = p_clip1._x - _l2.xMin;
_l5.ty = p_clip1._y - _l2.yMin;
_l7.draw(p_clip1, _l5, new flash.geom.ColorTransform(1, 1, 1, 1, 255, -255, -255, _l11));
_l5 = p_clip2.transform.matrix;
_l5.tx = p_clip2._x - _l2.xMin;
_l5.ty = p_clip2._y - _l2.yMin;
_l7.draw(p_clip2, _l5, new flash.geom.ColorTransform(1, 1, 1, 1, 255, 255, 255, _l11), "difference");
var _l6 = _l7.getColorBoundsRect(4294967295.000000, 4278255615.000000);
_root.createEmptyMovieClip("blah", 200);
blah.attachBitmap(_l7, 1);
if (_l6.width == 0)
{
return(null);
} // end if
_l6.x = _l6.x + _l2.xMin;
_l6.y = _l6.y + _l2.yMin;
return(_l6);
} // End of the function
} // End of Class
Hier iemand die BitmapData.hitTest() heeft gebruikt voor Shape Based Collision Detection (http://www.flashkit.com/board/showthread.php?p=3392829). :).
Trouwens kan deze topic misschien verplaatst worden naar ActionScript Discussies aangezien dat de plek is voor dit soort dingen?
SaphuA
%Europe/Berlin %918 %2005, 23:03
Sorry hoor SaphuA, maar hier overtuig je mij niet mee :D.
Ik zie graag een simpele opzet van wat een aantal apart uitziende shapes die je kunt testen door ze over elkaar te dragen en op die manier een hit te creeëren, op zo'n manier dat het bruikbaar is voor meer situaties.
Yup, daar is deze manier ook niet voor. Ik heb het misschien een beetje verkeerd uitgelegt, maar dit test op pixel-level, en niet per shape. Dus in zo verre dat dit alleen bruikbaar is waneer je de pixel's van de shape duidelijk kunt aangeven.
Heb je toestemming gevraagd om de source te decompilen? Zo nee, haal hem dan liever weg, dat is neit erg netjes.
De manier die zij gebruiken maakt inderdaad geen gebruik van hitTests. Het idee erachter is de twee plaatjes samen in een filter zetten, waneer ze elkaar dan overlappen vind er een hitTest plaats, door de kleurverschillen die dan onstaan.
Dauntless
%Europe/Berlin %925 %2005, 23:12
De manier die zij gebruiken maakt inderdaad geen gebruik van hitTests. Het idee erachter is de twee plaatjes samen in een filter zetten, waneer ze elkaar dan overlappen vind er een hitTest plaats, door de kleurverschillen die dan onstaan.
Ey, TheDutch, daar zijn wij eigenlijk ook mee bezig :D. Alé, die webcam app... Gewoon dus (bv) de image van shape 1 en shape 2 samensmijten, dan bv een draw van dit samengevoegde plaatje met shape 1, dan een threshold en dan gaan checken hoeveel pixels er zijn van die nieuwe kleur... Maar daarna natuurlijk ook nog weten wáár hij hit... Die nieuwe Flash 8 is leuk!!! :D (Spijtig dat m'n trial er binnen 4 dagen opzit :'( )
TheDutch
%Europe/Berlin %199 %2005, 05:47
Klopt, we zijn inderdaad al aardig op weg om zelf zo iets te schrijven met dat threshold. Eindelijk weer dingetjes in Flash waar we lekker mee kunnen stoeien :D.
TheDutch
%Europe/Berlin %208 %2005, 05:59
Heb je toestemming gevraagd om de source te decompilen? Zo nee, haal hem dan liever weg, dat is neit erg netjes.
Wanneer je me beter zou kennen, zou je weten dat ik totaal niet zo in elkaar steek als jij nu voordoet komen. Ik decompile alleen maar om van te leren of om mensen uit te leggen hoe bepaalde dingen in elkaar steken. Zo ook in dit geval is het om een idee te krijgen hoe het gedaan is en vervolgens met die kennis zelf een class te bouwen. Kennisdeling door decompiling is in mijn ogen een verrijking. Er zit namelijk een heel groot verschil tussen educatie en rippen :).
Maar om je gerust te stellen is hier de officiele source code van gsKinner, waarvan hij al had gezegt dat ie het ging releasen wanneer Flash 8 er was: http://www.gskinner.com/blog/archives/2005/10/source_code_sha.html
ninetynine
%Europe/Berlin %235 %2005, 06:39
Ah leuk , ik zie dat jullie al een beetje begonnen zijn ? :)
Dit moet toch een voorruitgang zijn in het game maken
met flash ?
SaphuA
%Europe/Berlin %262 %2005, 07:18
Wanneer je me beter zou kennen, zou je weten dat ik totaal niet zo in elkaar steek als jij nu voordoet komen. Ik decompile alleen maar om van te leren of om mensen uit te leggen hoe bepaalde dingen in elkaar steken. Zo ook in dit geval is het om een idee te krijgen hoe het gedaan is en vervolgens met die kennis zelf een class te bouwen. Kennisdeling door decompiling is in mijn ogen een verrijking. Er zit namelijk een heel groot verschil tussen educatie en rippen :).
Maar om je gerust te stellen is hier de officiele source code van gsKinner, waarvan hij al had gezegt dat ie het ging releasen wanneer Flash 8 er was: http://www.gskinner.com/blog/archives/2005/10/source_code_sha.html
Haha sorry dat ik je niet goed ken ;) Je bent voor mij meer een pixelmeneertje |)
Maar anwayz, wist niet dat de source beschikbaar was, dus dan zal het wel ok zijn. Ik vind gewoon dat je altijd om toestemming moet vragen voor het decompilen van iemands source, en al helemaal als je het op een forum post.
Houston, ik twijfel eraan of dit een vooruitgang is. De manier die ik heb gepost is nogal minimaal (hoewel je er een hoop uit kunt halen als je je best doet ;)), en van de Flash 8 manier weten we nog te weinig om er een voordeel uit te halen, hoewel Tonypa's post er zeer veelbelovend uitziet :D
http://www.flashkit.com/board/showthread.php?p=3392829
DL, dat met die webcam is toch het verschil tussen de kleuren in twee lagen meten? Op welke manier heeft dat met anyshape vs anyshape hitTest te maken? :)
Greetz
Dauntless
%Europe/Berlin %274 %2005, 07:35
DL, dat met die webcam is toch het verschil tussen de kleuren in twee lagen meten? Op welke manier heeft dat met anyshape vs anyshape hitTest te maken? :)
Dat lijkt me een creatieve manier om dat te doen :p. Je kan er iig mee berekenen DAT er een collision is... Wáár hij is gaat moeilijker zijn... Maar dus
Je hebt 2 shapes, 1 ventje en 1 platform.
Je copieert de bitmap van het ventje 'over' de bitmap van het platform.
Dan leg je nogmaals die bitmap van het platform over die zojuist gemaakte bitmap en je gebruikt de difference filter. Dan laat je alle pixels die anders zijn een héél specifieke kleur maken. Wanneer dan dus dat ventje het platform zou raken, zou je zien waar hij h'm raakt door dat die pixels een andere kleur kebben.
TheDutch
%Europe/Berlin %303 %2005, 08:17
Haha sorry dat ik je niet goed ken ;) Je bent voor mij meer een pixelmeneertje |)
Maar anwayz, wist niet dat de source beschikbaar was, dus dan zal het wel ok zijn. Ik vind gewoon dat je altijd om toestemming moet vragen voor het decompilen van iemands source, en al helemaal als je het op een forum post.
Ik ben misschien wel een pixelmeneertje voor jou, maar de mensen die mij al langer in de (Internationale) Flash Community kennen weten hoe ik ben wanneer het aankomt op rippen van code :).
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.