Gamestudio Links
Zorro Links
Newest Posts
Change chart colours
by 7th_zorro. 05/11/24 09:25
Data from CSV not parsed correctly
by dr_panther. 05/06/24 18:50
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
1 registered members (AndrewAMD), 1,310 guests, and 1 spider.
Key: Admin, Global Mod, Mod
Newest Members
Hanky27, firatv, wandaluciaia, Mega_Rod, EternallyCurious
19051 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 3 of 3 1 2 3
Re: schau doch, ich steh neben dir! [Re: Pappenheimer] #310783
02/16/10 22:57
02/16/10 22:57
Joined: Jul 2009
Posts: 36
S
SomebodyNew Offline
Newbie
SomebodyNew  Offline
Newbie
S

Joined: Jul 2009
Posts: 36
Quote:
mit "you = ent_next(you);" rufst Du die Entity auf, die in der Liste der Engine steht, unabhängig davon, ob sie im Scanbereich liegt oder nicht, und damit hast Du das Scannen bereits überflüssig gemacht. Dann ist sparender, wenn Du direkt die Liste der Entities durchgehst, und immer, wenn er die Id des Gegners hat (z.B: die Roten haben die Id 1 und die Blauen die Id 2), dann vergleichst Du den Abstand.

Diese Herangehensweise habe ich öfters im Forum gesehen. Jedes Mal denke ich mir, braucht das nicht enorm viel Rechenpower???
Mal angenommen es würden 500 Entities im Level rumstehen.
Sagen wir 30 davon sind "potentielle Ziele"
Und das Level geht von -50.000 bis +50.000 Quants.

Dann müsste der Rechner 500 If-Abfragen prüfen.
Und 30 mal x2-x1, y2-y1, z2-z1 für im Schnitt 5stellige Dezimal-Zahlen rechnen.
Sowie gegebenenfalls die "neue nächste entity" abspeichern (was ja bis zu 30 mal der Fall sein kann).

Und das ganze laufend für jeden(!) Panzer der im Level rumsteht.

Ich habe schon ein schlechtes Gewissen, jeden Frame die Position des Mauszeigers abzugreifen...

Harmloser Anfänger bittet um Aufklärung =)

Re: schau doch, ich steh neben dir! [Re: SomebodyNew] #310784
02/16/10 23:01
02/16/10 23:01
Joined: Nov 2007
Posts: 2,568
Germany, BW, Stuttgart
MasterQ32 Offline
Expert
MasterQ32  Offline
Expert

Joined: Nov 2007
Posts: 2,568
Germany, BW, Stuttgart
ein Scan muss genau dasselbe machen:
schaue, welche von deinen Objekten im Scanbereich liegt
also, Winkelberechnungen, usw...

dein Mauszeiger braucht vllt. eine halbe Millisekunde(max.) zur Positionsberechnung, da der Prozessor nur mal kurz nen Speicherbereich kopieren muss.
daher dürfte die ent_next-funktion schneller sein.


Visit my site: www.masterq32.de
Re: schau doch, ich steh neben dir! [Re: MasterQ32] #310793
02/17/10 00:41
02/17/10 00:41
Joined: Sep 2003
Posts: 5,900
Bielefeld, Germany
Pappenheimer Offline
Senior Expert
Pappenheimer  Offline
Senior Expert

Joined: Sep 2003
Posts: 5,900
Bielefeld, Germany
'ent_next' musst Du ja nicht jedes Frame aufrufen.
Und wenn die Menge der Entities zu groß ist, machst halt nur einmal so einen Aufruf, um die Handles der Gegner in einer Liste zu speichern, um dann regelmäßig die Liste der Handles durchzugehen und zu überprüfen, welcher der Gegner zur Zeit am nächsten ist.
Und wenn Du tausende von Gegnern hättest, dann machst du halt eine Liste, in die Du immer mal wieder die Gegner aufnimmst, die in einem bestimmten Umkreis sind.

Re: schau doch, ich steh neben dir! [Re: Pappenheimer] #314660
03/09/10 22:22
03/09/10 22:22
Joined: Feb 2010
Posts: 482
in deinem Kopf
Otter Offline OP
Senior Member
Otter  Offline OP
Senior Member

Joined: Feb 2010
Posts: 482
in deinem Kopf
RÄTSEL GELÖST:

So für alle dies interessiert, hier der vereinfachte code, der zwei oder mehr "parteien" sich gegenseitig anblicken lässt. Es wird immer nur der nächstliegende "gegner" anvisiert.

function team1()
{
my.skill10 = 1;
while (1)
{
closest_dist = 100000;
you = ent_next(NULL);
while(you != NULL)
{
if((vec_dist(my.x, you.x) < closest_dist)&&(you.skill10 == 2))
{
closest_dist = vec_dist(my.x, you.x);
my.skill4 = handle(you);
you = ptr_for_handle (my.skill4);
vec_set (temp.x, you.x);
vec_sub (temp.x, my.x);
vec_to_angle (my.pan, temp);
}
you = ent_next(you);
}
wait(1);
}
}

Der code stammt von Pappenheimer, dem ich hiermit nochmal danken will. wink


Be my UBB-Buddy, without any reason!
Re: schau doch, ich steh neben dir! [Re: SomebodyNew] #314663
03/09/10 22:39
03/09/10 22:39
Joined: Apr 2007
Posts: 3,751
Canada
WretchedSid Offline
Expert
WretchedSid  Offline
Expert

Joined: Apr 2007
Posts: 3,751
Canada
Originally Posted By: SomebodyNew
Diese Herangehensweise habe ich öfters im Forum gesehen. Jedes Mal denke ich mir, braucht das nicht enorm viel Rechenpower???
Mal angenommen es würden 500 Entities im Level rumstehen.
Sagen wir 30 davon sind "potentielle Ziele"
Und das Level geht von -50.000 bis +50.000 Quants.

Dann müsste der Rechner 500 If-Abfragen prüfen.
Und 30 mal x2-x1, y2-y1, z2-z1 für im Schnitt 5stellige Dezimal-Zahlen rechnen.
Sowie gegebenenfalls die "neue nächste entity" abspeichern (was ja bis zu 30 mal der Fall sein kann).


Nein, die Funktion geht durch den Array von Entities den die Engine hat. Das ganze sieht ungefähr so aus (aus meiner Engine)
Code:
- (vdTMXLayer *)nextLayer:(vdTMXLayer *)_layer {
	if(contLayer > 0)
	{
		if(!_layer)
			return container[0];
		
		for(int i=0; i<contLayer; i++)
		{
			if(container[i] == _layer)
			{
				if(i < contLayer-1)
				{
					return container[i+1];
				} else {
					return NULL;
				}
			}
		}
	}
	return NULL;
}




Shitlord by trade and passion. Graphics programmer at Laminar Research.
I write blog posts at feresignum.com
Page 3 of 3 1 2 3

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