2 registered members (VoroneTZ, TipmyPip),
1,333
guests, and 0
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
[A7] Entity bei Berührung durchsichtig und UNTOUCHABLE machen
#348823
11/30/10 22:35
11/30/10 22:35
|
Joined: Jan 2005
Posts: 605 Deutschland, NRW
garv3
OP
User
|
OP
User
Joined: Jan 2005
Posts: 605
Deutschland, NRW
|
Hallo zusammen, ich suche nach einer Möglichkeit, eine Entity bei der Berührung durch den Mauszeiger durchsichtig und untouchable zu machen, so dass eine dahinter liegende Entity gesehen wird und angeklickt werden kann. Das ist im Grunde ja kein Problem aber die durchsichtige Entity soll beim Release des Mauszeigerst wieder undurchsichtig werden. Allerdings kann ich das EVENT_RELEASE nicht abfragen, da die Entity anscheinend sofort dieses EVENT auslöst, wenn sie auf UNTOUCHABLE gesetzt wird. Außerdem muss sie bei dem Release ja auch wieder touchable werden, da bei der nächsten Berührung des Mauszeigers das Event zur Erzeugung der Transparenz sonst nicht getriggert würde. Ich hab es z.B. so probiert:
function sprite_event()
{
if(event_type == EVENT_TOUCH)
{
my.flags2 |= UNTOUCHABLE;
set(my, TRANSLUCENT);
return;
}
if(event_type == EVENT_RELEASE)
{
my.flags2 &= ~UNTOUCHABLE;
reset(my, TRANSLUCENT);
}
}
...
my.emask = ENABLE_TOUCH | ENABLE_RELEASE;
Allerdings flackert die Entity so unaufhaltsam,so lange der Mauszeiger sie berührt, da sie ja immer transparent und untransparent gesetzt wird...
GameStudio Version: A7 Pro v7.86
|
|
|
Re: [A7] Entity bei Berührung durchsichtig und UNTOUCHABLE machen
[Re: garv3]
#348827
11/30/10 23:12
11/30/10 23:12
|
Joined: Mar 2004
Posts: 92 Dresden
Revo
Junior Member
|
Junior Member
Joined: Mar 2004
Posts: 92
Dresden
|
dieses Problem hatte ich bei einem meienr ersten minigames auch (war zwar noch A4/A5 oder so - ist aber das gleiche Problem gewesen...) hatte das damals nicht Lösen können. Aber wenn ich recht überlege müsste es mit dem mouse_ent-pointer lösbar sein - wenn du es hinbekommst, dass du solange keine neue release-events annimmt solange die verdeckende entity noch mouse_ent ist - in einem pointer speicehrn oder so ...) ist halt die Frage ob man irgendwie layers für die mausberührung amchen könnte (alternativ msust du halt mehrmals pro sekunde tracen und damit arbeiten - ist allerdings sehr ressourcenraubend ... )
Last edited by Revo; 11/30/10 23:13.
|
|
|
Re: [A7] Entity bei Berührung durchsichtig und UNTOUCHABLE machen
[Re: Superku]
#348833
12/01/10 00:43
12/01/10 00:43
|
Joined: Jan 2005
Posts: 605 Deutschland, NRW
garv3
OP
User
|
OP
User
Joined: Jan 2005
Posts: 605
Deutschland, NRW
|
Ich hab jetzt einfach eine Funktion gestartet, die in einer while-Schleife wartet, bis sich die Maus ein ganzes Stück bewegt hat. So wird die verdeckende Entity zwar nicht unbedingt sofort wieder sichtbar, wenn die Maus sie verlässt, aber das fällt kaum auf.
Habe jetzt aber noch eine andere Frage bezüglich des EVENT_TOUCH: Die Entity ist eine Sprite-Entity mit Alphakanal. Kann man es irgendwie bewerkstelligen, dass das TOUCH event nicht getriggert wird, wenn die Maus sich über einem vollkommen transparenten Pixel des Sprites befindet?
GameStudio Version: A7 Pro v7.86
|
|
|
Re: [A7] Entity bei Berührung durchsichtig und UNTOUCHABLE machen
[Re: garv3]
#348834
12/01/10 01:50
12/01/10 01:50
|
Joined: Apr 2005
Posts: 4,506 Germany
fogman
Expert
|
Expert
Joined: Apr 2005
Posts: 4,506
Germany
|
Free-form buttons can be used when the button function retrieves the pixel at the mouse position through pixel_for_bmap(), and uses the pixel color or alpha value to determine whether the button was hit or not.
Vom Handbuch unter "button", sollte auch mit Sprites klappen wenn Du einen Trace von der Maus draufschickst und den Alphawert an der Trefferstelle ausliest. SCAN_TEXTURE muß aktiviert werden um über das Hit Struct an die Position zu kommen.
no science involved
|
|
|
Re: [A7] Entity bei Berührung durchsichtig und UNTOUCHABLE machen
[Re: fogman]
#348838
12/01/10 03:43
12/01/10 03:43
|
Joined: Jan 2005
Posts: 605 Deutschland, NRW
garv3
OP
User
|
OP
User
Joined: Jan 2005
Posts: 605
Deutschland, NRW
|
Danke für den Tipp, aber leider werden hit.u1 und hit.v1 nach dem Trace nicht gesetzt. Funktioniert vielleicht nur bei Model-Entities!? Habe es bisher so probiert:
VECTOR temp_vec;
vec_set(temp_vec, mouse_dir3d);
vec_normalize(temp_vec, 90000000);
vec_add(temp_vec, camera.x); // Vektor für den Trace vorbereitet
BMAP* temp_bmap = bmap_for_entity(me,0); // Die Bitmap geladen
var alphawert;
COLOR farbe;
var format = bmap_lock(temp_bmap, 0); // Bitmap gelockt und Format gespeichert
var pixel;
my.push = 99999; //Push erhöht, damit nur diese Enitity vom Trace getroffen werden kann
wait(1); // einen Frame warten, das c_trace in event_funktionen sonst nicht funktioniert
while(mouse_ent == me) // solange die maus über dem Sprite ist
{
if (c_trace(camera.x, temp_vec, (IGNORE_PUSH | SCAN_TEXTURE | USE_POLYGON)) > 0) // falls der trace von der camera durch den mousezeiger etwas trifft
{
if(hit.entity == me) // falls das sprite selbst getroffen wurde
{
pixel = pixel_for_bmap(temp_bmap, hit.u1, hit.v1); // pixel an trefferstelle auslesen (geht nicht)
pixel_to_vec(farbe, alphawert, format, pixel); // pixelwerte speichern
debug1 = hit.u1; // bleibt immer 0
debug2++; // wird korrekt hochgezählt, solange der mauszeiger über dem sprite ist
}
vec_set(temp_vec, mouse_dir3d);
vec_normalize(temp_vec, 90000000);
vec_add(temp_vec, camera.x); // trace-vektor neu berechnet, da sich die mausposition über dem sprite ja ändert
}
wait(1);
}
bmap_unlock(temp_bmap); // Bitmap wieder freigegeben
debug1 = -2; // wird korrekt zurückgesetzt, wenn die maus das sprite verlässt!
my.push = 1; // push wieder reduzieren
Vielleicht siehst du ja einen Fehler... Danke schonmal!
GameStudio Version: A7 Pro v7.86
|
|
|
|