1 registered members (AndrewAMD),
1,089
guests, and 2
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Frage zu Fog of War aus AUM43
#263003
04/27/09 14:04
04/27/09 14:04
|
Joined: Jul 2008
Posts: 2,107 Germany
rayp
OP
X
|
OP
X
Joined: Jul 2008
Posts: 2,107
Germany
|
Habe diesen Code aus AUM43
function manage_fog()
{
my.tilt = 90;
my.alpha = 100;
my.oriented = on;
my.transparent = on;
my.passable = on;
while (1)
{
if (vec_dist(player.x, my.x) < 350)
{
my.alpha = 0;
}
else
{
my.alpha = 100;
}
wait (1);
}
}
Das ist auch alles schön und gut. Mein Problem ist aber das ich kein PLAYER habe, sondern viele verschiedene Einheiten die man steuern kann (auch gleichzeitig). Sprich fällt PLAYER.X (was ja zwingent nötig ist) flach. Impact kann ich nicht nehmen da die Sprites ja passable sind (und sowie so zu hoch für eine Kollision mit Models...schweben ja über dem Spielfeld). Kann mir jmd sagen, wie ich einen Entity-Array per Schleife durchgehe? Oder eine andere Lösung? Wie gesagt, Problem ist, das sich verschiedene Einheiten auf dem Spielfeld bewegen, nicht nur ein PLAYER=ME-Model. Wie immer bin ich für alle Hilfen dankbar ^^ Edit: Ich glaube die Lösung liegt in Handles (siehe AUM47). ^^
Last edited by rayp; 04/27/09 14:12.
Acknex umgibt uns...zwischen Dir, mir, dem Stein dort... "Hey Griswold ... where u gonna put a tree that big ?" 1998 i married my loved wife ... Sheeva from Mortal Kombat, not Evil-Lyn as might have been expected rayp.flags |= UNTOUCHABLE;
|
|
|
Re: Frage zu Fog of War aus AUM43
[Re: rayp]
#263024
04/27/09 16:49
04/27/09 16:49
|
Joined: Feb 2006
Posts: 385 Oldenburg,Germany
Ralph
Senior Member
|
Senior Member
Joined: Feb 2006
Posts: 385
Oldenburg,Germany
|
Erstellst du deine Einheiten per Script? Wenn ja mach das doch so: Das schreibst du an ganz oben zu den Variablen im Script.
var* unitHandleArray[max_entities];
var unitHANum = 0;//Nummer der schon eingetragenen Einheiten
Das in die Funktion wo du die Einheiten erstellst.
you = ent_create("sphere.mdl",nullvector,NULL);//Hier kommt deine ent_create Funktion hin
unitHandleArray[unitHANum] = handle(you);
unitHANum++;
Und das ist die neue "FOG" Funktion.
function manage_fog()
{
my.tilt = 90;
my.alpha = 100;
my.oriented = on;
my.transparent = on;
my.passable = on;
ENTITY* ent; //temp Entity-Pointer
var i = 0;
while (1)
{
for(i=0;i<unitHANum;i++)
{
ent = ptr_for_handle(unitHandleArray[i]);
if (vec_dist(ent.x, my.x) < 350)
{
my.alpha = 0;
}
else
{
my.alpha = 100;
}
ent = NULL;
}
wait (1);
}
}
Ich habe das jetzt nicht getested, sollte aber funktionieren. MFG Ralph
|
|
|
Re: Frage zu Fog of War aus AUM43
[Re: Ralph]
#263073
04/27/09 19:08
04/27/09 19:08
|
Joined: Jul 2008
Posts: 2,107 Germany
rayp
OP
X
|
OP
X
Joined: Jul 2008
Posts: 2,107
Germany
|
Danke! Irgendwie geht da nix von. Die ++ Kommandos sowie FOR kennt meine A6 nicht mal. Ich dachte auch an FOR (durch Delphi)...aber kennt er net. Edit: ES GEHT EINFACH NICHT, ICH DREH BALD DURCH
function manage_fog()
{
my.tilt = 90;
my.alpha = 100;
my.oriented = on;
my.transparent = on;
my.passable = on;
WHILE(Zomb_Index==0) { WAIT(1); }
while (1)
{
Carry_Zomb_Array = ptr_for_handle(Zomb_Array[MY.SKILL90]);
IF(Carry_Zomb_Array!=NULL) {
if (vec_dist(Carry_Zomb_Array.x, my.x) < 350)
{
my.alpha = 0;my.invisible=ON;
}
else
{
my.alpha = 100;
}
Carry_Zomb_Array = NULL;
}
IF (MY.SKILL90>Zomb_Index) { MY.SKILL90=0; }
ELSE { MY.SKILL90+=1; }
wait (1);
}
}
So läuft es. ABER: Wenn ich drei Einheiten erstellt hab, geht die zweite auf einmal nicht mehr?!?? Irgendwo ist sowas von der Wurm drin, ich sehe keinen Fehler, ich bin total verwirrt *flenn* Das ist der totale Horror. Es geht, aber auch nicht. Erstellt man wiegesagt ein paar Einheiten, dann wechseln sie sich ab, mit Fog-"Fressen". Manchma können sie plötzlich den Fogofwar nicht mehr vertreiben...ein anderes mal schon...HILFE
Last edited by rayp; 04/27/09 20:19.
Acknex umgibt uns...zwischen Dir, mir, dem Stein dort... "Hey Griswold ... where u gonna put a tree that big ?" 1998 i married my loved wife ... Sheeva from Mortal Kombat, not Evil-Lyn as might have been expected rayp.flags |= UNTOUCHABLE;
|
|
|
Re: Frage zu Fog of War aus AUM43
[Re: Ralph]
#263097
04/27/09 21:03
04/27/09 21:03
|
Joined: Feb 2006
Posts: 385 Oldenburg,Germany
Ralph
Senior Member
|
Senior Member
Joined: Feb 2006
Posts: 385
Oldenburg,Germany
|
Okay dann versuch ich das mal zu convertieren... "unitHANum++;" daraus machst du "unitHANum += 1;" Und die manage_fog ersetzt du durch das:
function manage_fog()
{
my.tilt = 90;
my.alpha = 100;
my.oriented = on;
my.transparent = on;
my.passable = on;
ENTITY* ent; //temp Entity-Pointer
var i = 0;
var unitisnear = 0; //neue var die speichert ob eine Einheit in der nähe ist
while (1)
{
while(i < unitHANum)
{
ent = ptr_for_handle(unitHandleArray[i]);
if (vec_dist(ent.x, my.x) < 350 && unitisnear == 0)
{
unitisnear = 1;
}
ent = NULL;
i += 1;
}
if (unitisnear == 1)
{
my.alpha = 0;
}
else
{
my.alpha = 100;
}
unitisnear = 0;
i = 0;
wait (1);
}
}
So müsste es funktionieren.
|
|
|
Re: Frage zu Fog of War aus AUM43
[Re: Ralph]
#263099
04/27/09 21:04
04/27/09 21:04
|
Joined: Jul 2008
Posts: 2,107 Germany
rayp
OP
X
|
OP
X
Joined: Jul 2008
Posts: 2,107
Germany
|
ja. Aber das liegt ja nicht an A6 oder A7 oder sonst was...irgendwas ist schlecht programmiert in der WHILE Schleife....aber was? Hier mal mein kompletter code. Es geht teilweise. Mal klappts mal nicht...irgendwas ist total falsch:
var Zomb_Index=0;
var Zomb_Array[100];
entity* Carry_Zomb_Array;
function Init_Unit()
{
Zomb_Array[index] = handle (me);
Zomb_index += 1;
..
.
}
function manage_fog()
{
my.tilt = 90;
my.alpha = 100;
my.oriented = on;
my.transparent = on;
my.passable = on;
WHILE(Zomb_Index==0) { WAIT(1); }
while (1)
{
Carry_Zomb_Array = ptr_for_handle(Zomb_Array[MY.SKILL90]);
IF(Carry_Zomb_Array!=NULL) {
if (vec_dist(Carry_Zomb_Array.x, my.x) < 350)
{
my.alpha = 0;my.invisible=ON;
}
else
{
my.alpha = 100;
}
Carry_Zomb_Array = NULL;
}
IF (MY.SKILL90>Zomb_Index) { MY.SKILL90=0; }
ELSE { MY.SKILL90+=1; }
wait (1);
}
}
starter create_fog_sprites()
{
WHILE (Zomb_Index==0) { WAIT(1); }
var row_index = 0;
var column_index = 0;
while (row_index < 64)
{
while (column_index < 64)
{
column_index += 1;
temp.x = column_index * 128 - 4000; // -2000 to 2000 on x
temp.y = row_index * 128 - 4000; // -2000 to 2000 on y
temp.z = CAMERA.Z-450;
ent_create ("fogofwar.tga", temp.x, manage_fog);
}
column_index = 0;
row_index += 1;
}
}
Edit: Ich probier mal deinen Code aus Wenn ich die erste Einheit erstelle geht es...danach bekomm ich die VEC_DIST Zeile mit LEEREN POINTER angezeigt...keine Ahnung warum. Das kann garnicht sein, da die Schleife ja nur bis Array-Maxiumum läuft ?!"?!?!
Last edited by rayp; 04/27/09 21:10.
Acknex umgibt uns...zwischen Dir, mir, dem Stein dort... "Hey Griswold ... where u gonna put a tree that big ?" 1998 i married my loved wife ... Sheeva from Mortal Kombat, not Evil-Lyn as might have been expected rayp.flags |= UNTOUCHABLE;
|
|
|
Re: Frage zu Fog of War aus AUM43
[Re: rayp]
#263100
04/27/09 21:10
04/27/09 21:10
|
Joined: Feb 2006
Posts: 385 Oldenburg,Germany
Ralph
Senior Member
|
Senior Member
Joined: Feb 2006
Posts: 385
Oldenburg,Germany
|
Okay dann mach mal vor "ent = NULL;" oder wie das bei dir heißt: unitHandleArray[i] = handle(ent); //bei ent das was du hast
Sonst schick mir schnell das ganze Projekt zu dann guck ich mir das mal an... so aus der ferne das zu beurteilen is ein wenig schwirig..
Last edited by Ralph; 04/27/09 21:13.
|
|
|
Re: Frage zu Fog of War aus AUM43
[Re: Ralph]
#263104
04/27/09 21:23
04/27/09 21:23
|
Joined: Jul 2008
Posts: 2,107 Germany
rayp
OP
X
|
OP
X
Joined: Jul 2008
Posts: 2,107
Germany
|
Also das funzt nun...habe die Stelle mit der falschen VAR (von mir) mit Kommentar versehn ^^
var Zomb_Index=0; //how many zombies are in the array
var Zomb_Array[100]; //Array for all active Zombies
ACTION Add_To_Object_In_Wed {
Zomb_Array[Zomb_Index] = handle (me); //HIER WAR DIE FALSCHE VAR
Zomb_index += 1;
}
ENTITY* ent; //temp Entity-Pointer
function manage_fog()
{
my.tilt = 90;
my.alpha = 100;
my.oriented = on;
my.transparent = on;
my.passable = on;
var i = 0;
var unitisnear = 0; //neue var die speichert ob eine Einheit in der nähe ist
while (1)
{
while(i < Zomb_Index)
{
ent = ptr_for_handle(Zomb_Array[i]);
if (vec_dist(ent.x, my.x) < 350 && unitisnear == 0)
{
unitisnear = 1;
}
ent = NULL;
i += 1;
}
if (unitisnear == 1)
{
my.alpha = 0;my.invisible=ON;
}
else
{
my.alpha = 100;
}
unitisnear = 0;
i = 0;
wait (1);
}
}
starter create_fog_sprites()
{
WHILE (Zomb_Index==0) { WAIT(1); }
var row_index = 0;
var column_index = 0;
while (row_index < 64)
{
while (column_index < 64)
{
column_index += 1;
temp.x = column_index * 128 - 4000; // -2000 to 2000 on x
temp.y = row_index * 128 - 4000; // -2000 to 2000 on y
temp.z = CAMERA.Z-450;
ent_create ("fogofwar.tga", temp.x, manage_fog);
}
column_index = 0;
row_index += 1;
}
}
Gute Nacht und nochma danke! Edit: Rein Framerate-Technisch ist der Fog of War irgendwie ein Supergau ...oder sagen wirs so, wenns heiss her geht, habe ich 20fps verloren ! Allerdings bei 5000x5000 Quants, 64 Reihen und 64 Spalten fog.
Last edited by rayp; 04/27/09 22:09.
Acknex umgibt uns...zwischen Dir, mir, dem Stein dort... "Hey Griswold ... where u gonna put a tree that big ?" 1998 i married my loved wife ... Sheeva from Mortal Kombat, not Evil-Lyn as might have been expected rayp.flags |= UNTOUCHABLE;
|
|
|
Moderated by mk_1, Perro, rayp, Realspawn, Rei_Ayanami, rvL_eXile, Spirit, Superku, Tobias, TSG_Torsten, VeT
|