Gamestudio Links
Zorro Links
Newest Posts
Newbie Questions
by fairtrader. 12/06/23 11:29
Zorro Trader GPT
by TipmyPip. 12/04/23 11:34
Square root rule
by Smallz. 12/02/23 09:15
RTest not found error
by TipmyPip. 12/01/23 21:43
neural function for Python to [Train]
by TipmyPip. 12/01/23 14:47
Xor Memory Problem.
by TipmyPip. 11/28/23 14:23
Training with command line parameters
by TipmyPip. 11/26/23 08:42
Combine USD & BTC Pairs In Asset Loop
by TipmyPip. 11/26/23 08:30
AUM Magazine
Latest Screens
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Tactics of World War I
Who's Online Now
7 registered members (3run, miwok, AndrewAMD, Quad, TipmyPip, fairtrader, 1 invisible), 637 guests, and 2 spiders.
Key: Admin, Global Mod, Mod
Newest Members
fairtrader, hus, Vurtis, Harry5, KelvinC
19019 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 1 of 2 1 2
Anfänger / Beginner LC #257064
03/20/09 10:36
03/20/09 10:36
Joined: Mar 2007
Posts: 1,852
A
alpha_strike Offline OP
Serious User
alpha_strike  Offline OP
Serious User
A

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 Offline
Expert
Xarthor  Offline
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:
Quote:

Parameter unknown current_cube Keyword


current_cube ist ein global definierter entity pointer:
Code:
ENTITY* current_cube = NULL;

(ob dahinter = NULL steht oder nicht ist völlig egal)

Re: Anfänger / Beginner LC [Re: Xarthor] #257083
03/20/09 12:39
03/20/09 12:39
Joined: Dec 2008
Posts: 271
Saturnus Offline
Member
Saturnus  Offline
Member

Joined: Dec 2008
Posts: 271
Nach meiner Erfahrung funktioniert nur der vordefinierte player-Pointer in digits. Benutzerdefinierte Pointer führen zu der oben beschriebenen Fehlermeldung.
Ob es sich dabei um einen Bug handelt weiß ich nicht, könnte ich mir aber vorstellen.

Re: Anfänger / Beginner LC [Re: Saturnus] #257084
03/20/09 12:51
03/20/09 12:51
Joined: Mar 2009
Posts: 112
Germany
K
KDuke Offline
Member
KDuke  Offline
Member
K

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] #257088
03/20/09 12:57
03/20/09 12:57
Joined: Mar 2007
Posts: 1,852
A
alpha_strike Offline OP
Serious User
alpha_strike  Offline OP
Serious User
A

Joined: Mar 2007
Posts: 1,852
Das muß doch mit panels möglich sein.
Wenn ich mehrere Objekte kontrollieren will, dann baue ich manchmal ziemlich große Statistik-Panels. Unter C-Skript ging das einwandfrei... sollte doch auch unter LC gehen?

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 Offline
Expert
Xarthor  Offline
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
T
TechMuc Offline
User
TechMuc  Offline
User
T

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.

Code:
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 wink )

Code:
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] #257092
03/20/09 13:03
03/20/09 13:03
Joined: Jul 2002
Posts: 4,436
Germany, Luebeck
Xarthor Offline
Expert
Xarthor  Offline
Expert

Joined: Jul 2002
Posts: 4,436
Germany, Luebeck
@TechMuc:
Deiner theorie widerspricht die tatsache das es mit dem "player" entity pointer einwandfrei funktioniert, egal ob player nun auf ein NULL objekt zeigt oder einen konkretes objekt repräsentiert.

Re: Anfänger / Beginner LC [Re: Xarthor] #257094
03/20/09 13:05
03/20/09 13:05
Joined: Jul 2008
Posts: 894
T
TechMuc Offline
User
TechMuc  Offline
User
T

Joined: Jul 2008
Posts: 894
das hat nichts mit theoriefindung zu tun.
Wenn ein Pointer auf 0 gesetzt ist und du auf ihn zugreifst ist das wohl ein crash oder? Wenn es mit player funktioniert, dann evtl. weil der pointer nicht gesetzt wurde und der pointer damit auf einen zufälligen Speicherbereich zugreift, was unter manchen bedingungen nicht crasht (zumindest die paar frames bis player gesetzt ist).

Wobei ich mich nicht zu 100% verbürgen würde, in wie weit hier C-Lite nach normalen Standards arbeitet. Es kann sein, dass Lite-C bei einem NULL-Pointer unter manchen Bediungen den Inhalt des Pointers und nicht den Wert des "Wertes der hinter des Pointers" steht anzeigt (Lite-C Feature: Auto-Recognation of Pointers. Also erstezten von . zu -> und andersrum)

Aber eigentlich ist der Standard total egal. Zugriff auf leere bzw. nicht intialisierte Pointer ist extrem unschön und sollte vermieden werden, selbst wenn es nicht crasht. S. die Lösungen oben.

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 Offline
Expert
Xarthor  Offline
Expert

Joined: Jul 2002
Posts: 4,436
Germany, Luebeck
Müsste dann aber nicht folgender code "crashen":
Code:
#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.
Page 1 of 2 1 2

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

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