Gamestudio Links
Zorro Links
Newest Posts
Data from CSV not parsed correctly
by EternallyCurious. 04/25/24 10:20
Trading Journey
by howardR. 04/24/24 20:04
M1 Oversampling
by Petra. 04/24/24 10:34
Zorro FIX plugin - Experimental
by flink. 04/21/24 07:12
Scripts not found
by juergen_wue. 04/20/24 18:51
zorro 64bit command line support
by 7th_zorro. 04/20/24 10:06
StartWeek not working as it should
by jcl. 04/20/24 08:38
folder management functions
by VoroneTZ. 04/17/24 06:52
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
3 registered members (AndrewAMD, SBGuy, Petra), 801 guests, and 8 spiders.
Key: Admin, Global Mod, Mod
Newest Members
Mega_Rod, EternallyCurious, howardR, 11honza11, ccorrea
19048 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
[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
G
garv3 Offline OP
User
garv3  Offline OP
User
G

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:
Code:
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 Offline
Junior Member
Revo  Offline
Junior Member

Joined: Mar 2004
Posts: 92
Dresden
grin 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 ... frown )

Last edited by Revo; 11/30/10 23:13.

-----3d Gamestudio Commercial---------
Vers. 7.8
Focus on Gaming
Re: [A7] Entity bei Berührung durchsichtig und UNTOUCHABLE machen [Re: Revo] #348829
11/30/10 23:26
11/30/10 23:26
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline
Senior Expert
Superku  Offline
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Kannst doch eine Funktion starten, welche solange in einer while-Schleife wartet, bis sich die Maus auf 2D-Ebene von dem Modell entfernt (entweder mit ein paar vec_to_screen-Befehlen oder einer 2D-Projektion des Modells als Bitmap, was natürlich um einiges aufwändiger wäre).


"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends
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
G
garv3 Offline OP
User
garv3  Offline OP
User
G

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
F
fogman Offline
Expert
fogman  Offline
Expert
F

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
G
garv3 Offline OP
User
garv3  Offline OP
User
G

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

Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1