c_trace durch eine transparente Stelle in einem Sprite

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? blush
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

Quote:
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. laugh
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. laugh
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".

Code:
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.

Code:
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) ....
© 2024 lite-C Forums