SKYCUBES wechseln

Posted By: Progger

SKYCUBES wechseln - 03/06/11 14:03

Hi Leute ich habe mal ne Frage und zwar wie kann ich skycubes während des Spieles wechseln ich habe es schon probiert das gab aber unschöne fehler
Vielen Dank für eure Hilfe laugh
MFG Progger laugh
Posted By: rvL_eXile

Re: SKYCUBES wechseln - 03/06/11 14:09

hey, hab das damals in C-script so gemacht.
Habe mir Buttons definiert und auf Click wurde dann der Sky gechanged.

Example:
Code:
sky skycube1
{
	type = <sky_daem+6.tga>;
	flags = cube;
}

sky skycube2
{
	type = <sky_blue+6.tga>;
	flags = cube;
}


Panel Sky_Change
{
	button = 25, 25,  Button_Sky_1, Button_Sky_1, Button_Sky_1, Change_to_Sky1, null, null;
	button = 25, 175, Button_Sky_2, Button_Sky_2, Button_Sky_2, Change_to_Sky2, null, null;

	digits(25,700,11,arial_font,1,Sky1);
	digits(25,720,11,arial_font,1,Sky2);
	
}

Function Change_to_Sky1
{
	Skycube1.visible=on;
	Skycube2.visible=off;
	Sky1=1;
	Sky2=0;
}

Function Change_to_Sky2
{
	Skycube1.visible=off;
	Skycube2.visible=on;
	Sky1=0;
	Sky2=1;
}



Gruß Sebastian
Posted By: xxxxxxx

Re: SKYCUBES wechseln - 03/06/11 14:09

zeig ma bitte was du bisher versucht hast!
ich nehe ma an das du bisher versucht hast den himmel zu entfernen und einen neuen zu creiren. probier ma zwei sky enties und ändere einfach den layer zur laufzeit.
EDIT: schon wieder kam mir jemand zuvor
xxxxxxx
Posted By: Progger

Re: SKYCUBES wechseln - 03/06/11 14:15

ich habe es so versucht da ich noch keine erfahrung drin habe laugh
Code:
ENTITY* mountain_cube =
{
  type = "NACHT+6.tga";
  flags2 = SKY | CUBE | SHOW;
  layer = 2;
  z = 30; // move 30 pixels upwards
}

ENTITY* mountain2_cube =
{
  type = "skyday+6.tga";
  flags2 = SKY | CUBE | SHOW;
  layer = 2;
  z = 30; // move 30 pixels upwards
}

function change_cubes()
{
sky+=1;
if(sky>1)
sky=0;

if(sky==0)
{
reset(mountain2_cube,CUBE);
reset(mountain2_cube,SKY);
reset(mountain2_cube,SHOW);

set(mountain_cube,CUBE);
set(mountain_cube,SKY);
set(mountain_cube,SHOW);
camera.ambient=-100;
}

if(sky==1)
{
reset(mountain_cube,CUBE);
reset(mountain_cube,SKY);
reset(mountain_cube,SHOW);

set(mountain2_cube,CUBE);
set(mountain2_cube,SKY);
set(mountain2_cube,SHOW);
}
}



und dann in der main on_f=change_cubes
mein Resultat BILD
MFG Progger laugh
Posted By: Progger

Re: SKYCUBES wechseln - 03/06/11 17:42

Hm hat keiner mehr ne idee da es nicht funktioniert
und ich bräuchte das schon dringend
MFG Progger laugh
Posted By: Widi

Re: SKYCUBES wechseln - 03/06/11 20:04

Für die SHOW, SKY, CUBE werden flags2 und nicht flags verwendet. Du kannst nicht das Makro "set" und "reset" für flags2 verwenden.

mountain_cube.flags2 |= SHOW; // set...
mountain_cube.flags2 &= ~SHOW; // reset...

Oder schreibe ein eigenes Makro für flags2 (set_2 / reset_2)

EDIT: Um eine var von 0 auf 1 und wieder auf 0 zu wechseln:
sky = -sky + 1;

oder:
sky = !sky;
Posted By: Progger

Re: SKYCUBES wechseln - 03/06/11 20:07

@widi vielen dank werde ich mal ausprobieren laugh
EDIT:Danke du hast meinen Tag gerettet laugh gibt es denn irgendwo im Handbuch wo man das hätte nachlesen können?
MFG Progger
Posted By: HeelX

Re: SKYCUBES wechseln - 03/06/11 22:12

Meinst du das mit den Makros oder allgemein wie man an so ein Problem herangeht?

Also das mit den Makros ist zugegebenerweise... ich sag mal... schlecht gelöst. Also zu allererst gibt es ja im Manual eine Seite, die "Macros" heißt. Da steht dann direkt ganz dick:

Quote:
The following macros are predefined in include\acknex.h for making life easier and code shorter. !! Valuable hint: look into acknex.h for checking what a certain macro is doing before using it. Macros in a programming language are notorious for causing trouble when used in a wrong way. So don't use a macro without knowing which code it generates.


Man ist also schonmal vorgewarnt wink in acknex.h steht dann:

Code:
#define set(obj,flag) obj->flags |= (flag)
#define reset(obj,flag) obj->flags &= ~(flag)
#define toggle(obj,flag) obj->flags ^= (flag)
#define is(obj,flag) (obj->flags & (flag))



Man sieht also, was reset, set und so weiter bewirken: wenn du das verwendest, wird dann der code der in der jeweils rechten define-Klausel steht, eingesetzt - das ist also keine Funktion, sondern einfach nur code. Diese speziellen Makros arbeiten auf dem flags field einer Datenstruktur.

Und jetzt kommt der ganz schön krumme und etwas glitschige Haken: zwar steht in der Einleitung, dass da unser Life dann easier werden würde damit, aber leider hat es JCL im Laufe der letzten Jahre verpasst, flags in einem Feld zu vereinheitlichen (womit ich jetzt nicht den Anspruch erhebe dass ich das besser könnte - das hat ja einen Grund.. dafür könnte ich zwanzig an einer Hand abzählen. Wir haben das auch schonmal angemerkt, aber manchmal will er sowas nicht so gerne wink ) Dadurch sind diese Makros im echten Leben leider wertlos, weil das ganz schön Mist ist bei den einen Datentypen auf eflags und flags2 da die echten Verorderungs-Anweisungen usw. zu verwenden und dann beim Rest reset und so.

Wir sind ja hier nicht beim Kirmesboxen... entweder das Eine oder das Andere aber nicht son Gemische, das bringt einen manchmal ganz vielleicht in den Wahnsinn wink Und Neulinge wissen solche Details eher nicht so direkt auf Anhieb, weswegen du dir keinen Vorwurf machen musst, dass du das auf Anhieb nicht gefunden hast.

Jetzt weißt dus aber! smile
Posted By: Widi

Re: SKYCUBES wechseln - 03/06/11 22:26

Ja, das mit den flags, flags2 und eflags war am Anfang auch verwirrend für mich. Manchmal, wenn mir langweilig ist, lese ich einfach so das Manual durch. Am Anfang habe ich vieles darin nicht verstanden, welcher Befehl für was gut ist. Aber je mehr Erfahrung du sammelst, desto mehr verstehst du darin. Dann kommt der "ahaaa" Effekt: Ahaa, für DAS ist dieser Befehl gut, kann ich hier und dort gut gebrauchen!
© 2024 lite-C Forums