Posted By: Alexander
c_trace durch eine transparente Stelle in einem Sprite - 02/23/11 19:08
Hallo, der Titel sagt es ja schon, kann man durch eine transparente Stelle in einem Sprite c_tracen und wenn ja, welche Bedingungen müssen erfüllt werden? Muss z.B. Polygon beim Sprite gesetzt werden?
Posted By: ventilator
Re: c_trace durch eine transparente Stelle in einem Sprite - 02/23/11 19:13
nein, c_trace() kann das nicht.
du könntest versuchen selbst an der stelle die transparenz zu überprüfen und dann dahinter weiterzutracen.
Posted By: fogman
Re: c_trace durch eine transparente Stelle in einem Sprite - 02/23/11 19:14
Ich würde es so probieren:
Trace aufs Sprite -> Alphawert an der Trefferstelle auslesen
hit.skin1,skin2 BMAP* pointers of the first and second texture of the hit surface. Can be used to determine the pixel color or alpha value at the contact position.
Alphawert == 0? - falls ja -> von der Trefferstelle weiter Richtung Ziel tracen, dabei
das Sprite ignorieren.
Edit: vent war schneller.
Posted By: xxxxxxx
Re: c_trace durch eine transparente Stelle in einem Sprite - 02/23/11 19:16
Du könntest bei c_trace scna_texture oder so setzen dann die beschaffen heit(alpha) prüfen und wenns transperent genug ist ein zeites mal von der position zum ziehl tracen(mit ignore_you) das machst du solange bis du angekommen bist! Ich weiß nicht ob es bei sprites klappt aber es sollte eigentlich seinen Zweck erfüffen es sei denn du schießt durch zehn transperteten sachen gleichzeitig durch dann wirts lam!
EDIT: zwei waren da schneller!
xxxxxxx
Posted By: Alexander
Re: c_trace durch eine transparente Stelle in einem Sprite - 02/23/11 19:18
Hallo zusammen, ja, super, danke für die Hilfe! Das sollte funktionieren.
Posted By: Alexander
Re: c_trace durch eine transparente Stelle in einem Sprite - 02/23/11 20:49
Jetzt muss ich aber doch noch mal doof fragen. Ich habe bei c_trace SCAN_TEXTURE gesetzt und habe eine if Abfrage "if (hit.skin1 ...)" wie komme ich jetzt an den Alphawert heran? Im Handbuch steht es handelt sich um einen BMAP* Pointer, da würde mir aber nur "pixel_to_vec" einfallen, was es aber eigentlich nicht sein kann, oder?
Posted By: fogman
Re: c_trace durch eine transparente Stelle in einem Sprite - 02/23/11 20:51
pixel_for_bmap ist das was Du suchst.
Posted By: Alexander
Re: c_trace durch eine transparente Stelle in einem Sprite - 02/23/11 21:34
Ich glaube ich bin auf dem Holzweg. "Pointer_Skin1 = hit.skin1;" funktioniert noch, danach gibt es den Fehler "E1515: Invalid arguments".
Pointer_Skin1 = hit.skin1;
bmap_lock(Pointer_Skin1, 0);
pixel = pixel_for_bmap(Pointer_Skin1, Pointer_Skin1.x, Pointer_Skin1.y);
bmap_unlock(Pointer_Skin1); // unlock the locked bitmap
pixel_to_vec(temp, alpha, 8888, pixel);
Posted By: Widi
Re: c_trace durch eine transparente Stelle in einem Sprite - 02/23/11 22:12
pixel = pixel_for_bmap(Pointer_Skin1, Pointer_Skin1.x, Pointer_Skin1.y);
wechsle das:
pixel = pixel_for_bmap(Pointer_Skin1, Pointer_Skin1.u1, Pointer_Skin1.v1);
u1 / v1 sind die Kontaktkoordinaten auf der hit.skin.
Frage auch ab, ob überhaupt eine entity getroffen wurde und führe den code nur aus, wenn dies zutrift (if (hit.entity))...
Teste auch das Format:
var format;
format = bmap_lock(...);
...
pixel_to_vec(temp, alpha, format, pixel);
Posted By: Alexander
Re: c_trace durch eine transparente Stelle in einem Sprite - 02/25/11 19:32
Hi, danke für deine Hilfe. Das Problem ist aber, er stürzt schon beim verriegeln des Bitmaps ab.
bmap_lock(Pointer_Skin1, 0);
Posted By: Widi
Re: c_trace durch eine transparente Stelle in einem Sprite - 02/25/11 19:56
Frage auch ab, ob überhaupt eine entity getroffen wurde und führe den code nur aus, wenn dies zutrift (if (hit.entity))...
Das hilft auch nicht? Versuch es auch mit
if (Pointer_Skin1) ....