Gamestudio Links
Zorro Links
Newest Posts
Zorro 2.70
by jcl. 09/29/25 09:24
optimize global parameters SOLVED
by dBc. 09/27/25 17:07
ZorroGPT
by TipmyPip. 09/27/25 10:05
assetHistory one candle shift
by jcl. 09/21/25 11:36
Plugins update
by Grant. 09/17/25 16:28
AUM Magazine
Latest Screens
Rocker`s Revenge
Stug 3 Stormartillery
Iljuschin 2
Galactic Strike X
Who's Online Now
3 registered members (NewbieZorro, TipmyPip, AndrewAMD), 14,749 guests, and 7 spiders.
Key: Admin, Global Mod, Mod
Newest Members
krishna, DrissB, James168, Ed_Love, xtns
19168 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Probleme mit action für eine Map-Entity #183677
02/13/08 12:08
02/13/08 12:08
Joined: Feb 2008
Posts: 9
Germany, Cologne
dinosaur Offline OP
Newbie
dinosaur  Offline OP
Newbie

Joined: Feb 2008
Posts: 9
Germany, Cologne
Hallo alle zusammen,
ich habe bisher noch nicht viel mit lite-C gemacht und bin gleich am Anfang auf folgendes Problem gestoßen.

Ich möchte gerne eine Tür über einen Trigger öffnen.
Dazu habe ich einen kleinen Testlevel mit zwei Räumen und einer Verbindungstür erstellt und darin einen ball als Spieler platziert.

Nun habe ich folgendes lite-C Programm geschrieben und die action door()
im WED an die Map-Entity die die Tür darstellt angebunden.
Code:

#include <acknex.h>
#include <default.c>

ENTITY* sky = {type = "skycube+6.tga"; flags2 = SKY | CUBE | VISIBLE;}
float fTilt = 10.0;
ENTITY* ent_door = NULL;
ENTITY* ent_ball = NULL;
var initpan;

void main()
{
level_load("small_level.wmb");
wait(2);


// while (ent_door == NULL) {wait(1);}
//
// initpan = ent_door.pan;
//
// while(ent_door.pan < initpan+90)
// {
// c_rotate(ent_door, vector(4*time_step,0,0), IGNORE_MAPS);
// wait(1);
// }
//
while(1)
{
if(key_pgup)
fTilt += time_step;
if(key_pgdn)
fTilt -= time_step;

wait(1);
}
}

action ball()
{
ent_ball = my;
ent_ball.trigger_range = 50;
vec_set(camera.x, my.x);
camera.y += 10;
camera.tilt = fTilt;

VECTOR* move_vec = vector(0,0,0);

while(1)
{
if(key_cur)
{
ent_ball.pan -= 5*time_step;
}
if(key_cul)
{
ent_ball.pan += 5*time_step;
}
if(key_cuu)
{
move_vec.x = 5*time_step;
}
if(key_cud)
{
move_vec.x = -5*time_step;
}
c_move(ent_ball,move_vec,nullvector,ACTIVATE_TRIGGER);
move_vec.x = 0;
vec_set(camera.x, ent_ball.x);
camera.pan = ent_ball.pan;
camera.tilt = fTilt;
wait(1);
}
}

function door_event()
{
if (event_type == EVENT_TRIGGER)
{
while (ent_door == NULL) {wait(1);}

ent_door.emask &= !ENABLE_TRIGGER;

initpan = ent_door.pan;

while(ent_door.pan < initpan+90)
{
c_rotate(ent_door, vector(4*time_step,0,0), IGNORE_YOU);
wait(1);
}
}
}
action door()
{
ent_door = my;
ent_door.trigger_range = 50;
ent_door.emask |= ENABLE_TRIGGER;
ent_door.event = door_event;
}


Wenn ich das Programm starte, kann ich im Debug-Modus sehen das die function door_event auch korrekt aufgerufen wird, wenn mein Ball in der Trigger-Range der Tür gelangt und auch in der While-Schleife der pan der Tür geändert wird.
Nur wird die Tür im Level nicht bewegt.

Wenn ich jedoch die Rotation der Tür in der main-Funktion ausführe (ist hier auskommentiert) dann sehe ich im Level wie sich die Tür dreht.

Was mache ich falsch? Gibts da einen Trick den ich noch nicht durchschaut habe?

Vielen Dank für jeden Hinweis.

Gruß
dinosaur

Re: Probleme mit action für eine Map-Entity [Re: dinosaur] #183678
02/13/08 13:47
02/13/08 13:47
Joined: Jan 2007
Posts: 221
F
Fenriswolf Offline
Member
Fenriswolf  Offline
Member
F

Joined: Jan 2007
Posts: 221
Hallo dinosaur,

in deinem Code ist ein kleiner Fehler:

ent_door.emask &= !ENABLE_TRIGGER;

Das Ausrufezeichen musst du hier einfach mit einer Tilde ersetzen:

ent_door.emask &= ~ENABLE_TRIGGER;


Ich habe deinen Code getestet und daran liegt es offenbar tatsächlich.
Wie und warum das falsche Zurücksetzen eines Entity-Flags dazu führt, kann ich dir allerdings auch nicht sagen.

Re: Probleme mit action für eine Map-Entity [Re: Fenriswolf] #183679
02/13/08 14:02
02/13/08 14:02
Joined: Feb 2008
Posts: 9
Germany, Cologne
dinosaur Offline OP
Newbie
dinosaur  Offline OP
Newbie

Joined: Feb 2008
Posts: 9
Germany, Cologne
Vielen Dank für die schnelle Antwort.

Auf das mit der Tilde hät ich ja auch kommen können.
Aber manchmal ist man einfach blind.

Warum dann die action nicht korrekt arbeitet bleibt wie du schon sagtest weiterhin ein Rätsel.

Noch mal Danke
Gruß
dinosaur


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

Gamestudio download | 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