|
7 registered members (3run, miwok, AndrewAMD, Quad, TipmyPip, fairtrader, 1 invisible),
637
guests, and 2
spiders. |
|
Key:
Admin,
Global Mod,
Mod
|
|
|
Anfänger / Beginner LC
#257064
03/20/09 10:36
03/20/09 10:36
|
Joined: Mar 2007
Posts: 1,852
alpha_strike
OP
Serious User
|
OP
Serious User
Joined: Mar 2007
Posts: 1,852
|
Habe ein kleines Problem beim Einstieg in LC.
Im Level ist ein Soldat, den Soldaten bezeichne ich als "spieler" und will in einem Panel über ein Digit dessen Position auf der X-Koordinaten anzeigen lassen.
Dabei gibt es eine Fehlermeldung. Unter C geht das alles... aber wo liegt das Problem bei LC?
Hier der Code...
ENTITY* spieler ;
action soldat() { spieler=me; set(my,SHADOW | CAST); my.material = mtl_specBump;
}
FONT* arial_font = "Arial#40b";
PANEL* sanzeige = { pos_x=0; pos_y=5; layer=1;
digits = 30, 150, 5, arial_font, 1, spieler.x;
red=250;green=250; blue=255; flags = SHOW; }
Hängt das mit einer globalen Definition zusammen? Wenn ich die globale Ur-Entity "player" verwende, dann geht das alles...
Last edited by alpha_strike; 03/20/09 10:40.
|
|
|
Re: Anfänger / Beginner LC
[Re: alpha_strike]
#257073
03/20/09 11:58
03/20/09 11:58
|
Joined: Jul 2002
Posts: 4,436 Germany, Luebeck
Xarthor
Expert
|
Expert
Joined: Jul 2002
Posts: 4,436
Germany, Luebeck
|
Bin gerade auf das gleiche Problem bei meinem Projekt gestoßen. Wäre um eine Antwort sehr erfreut. Die Fehlermeldung lautet: Parameter unknown current_cube Keyword
current_cube ist ein global definierter entity pointer:
ENTITY* current_cube = NULL;
(ob dahinter = NULL steht oder nicht ist völlig egal)
|
|
|
Re: Anfänger / Beginner LC
[Re: Saturnus]
#257084
03/20/09 12:51
03/20/09 12:51
|
Joined: Mar 2009
Posts: 112 Germany
KDuke
Member
|
Member
Joined: Mar 2009
Posts: 112
Germany
|
Wenn das nicht über digits geht wäre dann draw_text nicht eine Alternative?
mit freundlichen Grüßen KDuke
Last edited by KDuke; 03/20/09 12:51.
Using A7 Free Click and join the 3dgs irc community! Room: #3dgs
|
|
|
Re: Anfänger / Beginner LC
[Re: KDuke]
#257089
03/20/09 13:00
03/20/09 13:00
|
Joined: Jul 2002
Posts: 4,436 Germany, Luebeck
Xarthor
Expert
|
Expert
Joined: Jul 2002
Posts: 4,436
Germany, Luebeck
|
@KDuke: sicherlich wäre draw_text eine Alternative allerdings eine die mit zusätzlichem Aufwand verbunden ist, da der numerische skill wert erst in einen String umgewandelt werden müsste der dann mittels draw_text ausgegeben wird. Alternativ könnte man dann auch den weg über einen array oder eine variable gehen die von der entity auf den aktuellen wert gesetzt wird. Laut manual können aber "object parameter" per digits angezeigt werden. Dies ist jedoch scheinbar nicht der Fall. Ich würde somit auf einen "Bug" oder ein falsch verkauftes feature tippen.
@alpha_strike: Dem stimme ich zu. Also vielleicht doch ein fall fürs Bug Forum?
Last edited by Xarthor; 03/20/09 13:01.
|
|
|
Re: Anfänger / Beginner LC
[Re: alpha_strike]
#257091
03/20/09 13:01
03/20/09 13:01
|
Joined: Jul 2008
Posts: 894
TechMuc
User
|
User
Joined: Jul 2008
Posts: 894
|
Das Panel von dir wird bereits im ALLERERSTEN frame versuchen auf "spieler" zuzugreifen, obwohl dessen action vermutlich erst im 5-10 frame ausgeführt wird. "spieler"->x ist dementsprechend eine typische Null-Pointer abfrage und führt zum crash. Es ist unsinn hier von fehlenden oder falsch verkauften Feature o.ä. zu sprechen. Ist einfach nur ein Programmierfehler.
ENTITY* spieler = NULL;
VECTOR spieler_2d_pos;
action soldat()
{
spieler=me;
set(my,SHADOW | CAST);
my.material = mtl_specBump;
while(me)
{
vec_set(spieler_2d_pos.x,me.x);
vec_to_screen(spieler_2d_pos,camera);
wait(10);
}
}
FONT* arial_font = "Arial#40b";
PANEL* sanzeige =
{
pos_x=0; pos_y=5; layer=1;
digits = 30, 150, 5, arial_font, 1, spieler_2d_pos.x;
red=250;green=250; blue=255;
flags = SHOW;
}
alternative methode (schneller & besser - ist mir aber erst als zweites eingefallen  )
ENTITY* spieler = NULL;
FONT* arial_font = "Arial#40b";
PANEL* sanzeige =
{
pos_x=0; pos_y=5; layer=1;
digits = 30, 150, 5, arial_font, 1, result; //oder irgendeine andere temporäre variable
red=250;green=250; blue=255;
flags = SHOW;
}
action soldat()
{
set(my,SHADOW | CAST);
my.material = mtl_specBump;
pan_setvar(sanzeige,1,1,me.x);
}
dritte methode wäre dynamisches erschaffen via pan_create
|
|
|
Re: Anfänger / Beginner LC
[Re: TechMuc]
#257095
03/20/09 13:11
03/20/09 13:11
|
Joined: Jul 2002
Posts: 4,436 Germany, Luebeck
Xarthor
Expert
|
Expert
Joined: Jul 2002
Posts: 4,436
Germany, Luebeck
|
Müsste dann aber nicht folgender code "crashen":
#include <acknex.h>
#include <default.c>
FONT* arial_font = "Arial#20b";
PANEL* anzeige =
{
pos_x = 0;
pos_y = 5;
layer = 1;
digits(30,150,5,arial_font,1,player.x);
flags = SHOW;
}
void main()
{
level_load(NULL);
player = NULL;
}
Ferner setzt alpha_strike seinen entity pointer "spieler" ja nicht explizit auf null sondern deklariert ihn ohne ihn zu initialisieren. Dies findet erst in der soldat action statt. edit: Deine zweite (alternative) lösung funktioniert einwandfrei. Dennoch steht die frage im raum warum es mit dem player pointer, welcher ja auch nur ein entity pointer sein soll, auch ohne "umweg" funktioniert.
Last edited by Xarthor; 03/20/09 13:16.
|
|
|
|