Gamestudio Links
Zorro Links
Newest Posts
loading historical data 1st time
by AndrewAMD. 04/14/23 12:54
Trade at bar open
by juanex. 04/13/23 19:43
Bug in Highpass2 filter
by rki. 04/13/23 09:54
Adding Limit Orders For IB
by scatters. 04/11/23 16:16
FisherN
by rki. 04/11/23 08:38
AUM Magazine
Latest Screens
SHADOW (2014)
DEAD TASTE
Tactics of World War I
Hecknex World
Who's Online Now
3 registered members (AndrewAMD, Grant, Neb), 908 guests, and 6 spiders.
Key: Admin, Global Mod, Mod
Newest Members
rki, FranzIII, indonesiae, The_Judge, storrealba
18919 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Anfängerfrage #242282
12/22/08 10:57
12/22/08 10:57
Joined: Dec 2008
Posts: 30
Germany
Nexus90 Offline OP
Newbie
Nexus90  Offline OP
Newbie

Joined: Dec 2008
Posts: 30
Germany
Noch eine kleine Frage an alle (Anfängerfrage):

///////////////////////////////////////

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

///////////////////////////////////////

var metall_var = 0;
var kristall_var = 0;
var crew_var = 0;

///////////////////////////////////////

FONT* arial = "Arial#20b";

///////////////////////////////////////

PANEL* panel =
{
digits(0, 0, "Metall (in Tonnen): %0.f", arial, 1, metal_var);
digits(200, 0, "Kristall (in Tonnen): %0.f", arial, 1, kristal_var);
digits(400, 0, "Crew (pro Mann): %0.f", arial, 1, crew_var);
flags = VISIBLE;
}

///////////////////////////////////////

function taste_m()
{
while(key_pressed(50) == off)
{
var metall_var +=1;
}
}

function main()
{
video_mode = 6;
screen_color.blue = 100;
taste_m();
}

Ich möchte , wenn ich die Taste M drücke, dass bei Metall eine Einheit hinzugefügt wird. Leider funktioniert es nicht und der Code ist mal wieder falsch. Könnt ihr mir helfen?

Re: Anfängerfrage [Re: Nexus90] #242290
12/22/08 11:42
12/22/08 11:42
Joined: Jul 2008
Posts: 894
T
TechMuc Offline
User
TechMuc  Offline
User
T

Joined: Jul 2008
Posts: 894
var metall_var +=1;

muss zu

metall_var += 1;

geändert werden.

Du musst ja nicht immer wenn du metal_var im code aufrufst, diese Variable neu definieren. Sie wurde ja bereits ganz oben im Code global definiert.

Re: Anfängerfrage [Re: TechMuc] #242375
12/22/08 19:29
12/22/08 19:29
Joined: Dec 2008
Posts: 30
Germany
Nexus90 Offline OP
Newbie
Nexus90  Offline OP
Newbie

Joined: Dec 2008
Posts: 30
Germany
OK, aber jetzt kommt eine Fehlermeldung:

Error in `Main´ line 30: ´off´ undeclared identifier
<while(key_pressed(50) == off)
>

kann mir da jemand helfen?

Re: Anfängerfrage [Re: Nexus90] #242376
12/22/08 19:36
12/22/08 19:36
Joined: Dec 2005
Posts: 490
Germany/Berlin-Velten
kasimir Offline
Senior Member
kasimir  Offline
Senior Member

Joined: Dec 2005
Posts: 490
Germany/Berlin-Velten
entweder du definierst off als 0
oder du setzt einfach 0 statt off!

Re: Anfängerfrage [Re: kasimir] #242379
12/22/08 20:05
12/22/08 20:05
Joined: Dec 2008
Posts: 30
Germany
Nexus90 Offline OP
Newbie
Nexus90  Offline OP
Newbie

Joined: Dec 2008
Posts: 30
Germany
Anstatt "off" habe ich "0" benutzt, wenn ich ein Testlauf starte
kommt der Compilier Bildschirm, lädt kurz und bleibt dann plötzlich stehen. Woran liegt das?

Re: Anfängerfrage [Re: Nexus90] #242381
12/22/08 20:15
12/22/08 20:15
Joined: Dec 2005
Posts: 490
Germany/Berlin-Velten
kasimir Offline
Senior Member
kasimir  Offline
Senior Member

Joined: Dec 2005
Posts: 490
Germany/Berlin-Velten
achso:
Code:
while(key_pressed(50) == off)
{
var metall_var +=1;
wait(1);
} 

endlosschleifen (while) niemals ohne wait starten -> das führt zum absturz!

Re: Anfängerfrage [Re: kasimir] #242398
12/22/08 21:30
12/22/08 21:30
Joined: Dec 2008
Posts: 30
Germany
Nexus90 Offline OP
Newbie
Nexus90  Offline OP
Newbie

Joined: Dec 2008
Posts: 30
Germany
Beim ersten Script hatte ich "wait(1);" weggelassen, da wurde das Script zwar am Anfang geladen, ging aber nicht weiter. Ich habe das "wait(1);" hinzugefügt, da wurde das Script erfolgreich geladen. Leider wird, sobald ich die Taste M drücke keine Metall Einheit hinzugefügt und ich finde keinen Fehler im Code. Was mach ich falsch?

Re: Anfängerfrage [Re: Nexus90] #242592
12/24/08 13:43
12/24/08 13:43
Joined: Dec 2008
Posts: 30
Germany
Nexus90 Offline OP
Newbie
Nexus90  Offline OP
Newbie

Joined: Dec 2008
Posts: 30
Germany
Ok, dass hat sich erledigt. Die Tastensteuerung funktioniert nun.
Das Problem bei mir ist das der Wert im Programm viel zu schnell addiert wird.

Hier mein neuerer Code:

///////////////////////////////////////

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

///////////////////////////////////////

var metall = 10;
var kristall = 24;
var crew = 35;

///////////////////////////////////////

FONT* arial = "Arial#20b";

///////////////////////////////////////

PANEL* panel =
{
digits(0, 0, "Metall(in Tonnen): %0.f", arial, 1, metall);
digits(200, 0, "Kristall(in Tonnen): %0.f", arial, 1, kristall);
digits(400, 0, "Crew(pro Mann): %0.f", arial, 1, crew);
flags = VISIBLE;
}

///////////////////////////////////////

function main()
{
video_mode = 6;
screen_color.blue = 100;
while (1)
{
if (key_m) metall += 5;
if (key_k) kristall += 5;
if (key_c) crew += 5;
wait (1);
}
}

Was kann ich machen das die Werte im Programm nicht so schnell addiert werden? Auch glaube ich das statt 5 nur 1 Einheit addiert wird. Kann jemand helfen?

Re: Anfängerfrage [Re: Nexus90] #242669
12/25/08 02:33
12/25/08 02:33
Joined: Aug 2003
Posts: 127
Berlin, Germany
C
CHaP Offline
Member
CHaP  Offline
Member
C

Joined: Aug 2003
Posts: 127
Berlin, Germany
Es gibt da verschiedene Möglichkeiten:

Zum einen kannst du das per time_step und max_fps lösen.
Wobei dann die Werte nicht mehr korrekt um fünf aufaddiert werden.
Ist also eine eher schlechte Lösung.

Probier anstelle einmal, die wait(1) Anweisung zu verändern.
wait(1) sagt ja dem Programm, dass die Variable zu jedem fertig berechnetem Bild um 5 erhöht werden soll. D.h. also, jedesmal, wenn du die Taste drückst, wird der Wert in Abhängigkeit der Framerate aufaddiert.

Ein Beispiel:
Nehmen wir an, du hast eine wirklich schlechte Framerate von einem Bild pro Sekunde (1FPS).
Der wait(1) Befehl würde also, pro Bild, einmal den Wert 5 zu der Variable, pro Sekunde, dazu addieren.

1 Bild pro Sekunde, 1 Sekunde die Taste gedrückt => die Variable wird um 5 aufaddiert.

Stell dir das ganze jetzt einmal mit 10 Bildern pro Sekunde vor.

10 Bilder pro Sekunde, 1 Sekunde die Taste gedrückt => die Variable wird um 5 * 10 aufaddiert.

Warum?
wait(1) heisst: Warte ein fertig berechnetes Bild, bevor die Schleife wiederholt wird.

Da nun aber innerhalb einer Sekunde 10 Bilder fertig gerechnet werden, wird die Schleife also 10mal wiederholt (pro Sekunde).

Kling jetzt wahrscheinlich sehr verwirrend, wenn dir die Kenntnisse über Framerates fehlen.

Muss dich nun nicht weiter stören, da ich dir erstmal erklären wollte, warum die Werte so verdammt schnell steigen.


Zurück zu deinem Problem.

Eine Lösung könnte sein:
Statt wait(1) => wait(-1) zu schreiben (Ein Minus bedeutet 'Warten in Sekunden'.

Somit veranlasst du das Programm eine Sekunde, egal wieviel Bilder pro Sekunde fertig gerechnet werden, zu warten, bevor es die Variable erneut um 5 aufaddiert.

Analog kannst du aber auch die zu wartenden Bilder höher stellen.

=> wait(50)

Ist allerdings ebenfalls eine sehr waghalsige Lösung.

Das Dritte wäre noch:
Darauf zu warten, bis die Taste wieder losgelassen wurde.
Und erst beim erneuten drücken, wird der Wert um 5 aufaddiert.

Beispiel:
Code:
var varKeyLocked = 0;
while(1)
{
    if(key_m)
    {
        if(!varKeyLocked)
        {
            metall += 5;
            varKeyLocked = 1;
        }
    }
    if(!key_m)
    {
        varKeyLocked = 0;
    }
    wait(1);
}



Sobald also die Taste 'M' gedrückt wird, wird die Variable varKeyLocked auf 1 gesetzt und verhindert somit ein erneutes aufaddieren.

Erst, wenn die Taste 'M' wird losgelassen wird, wird die Variable varKeyLocked auf 0 gesetzt und die 'metall' Variable kann bei erneutem drücken wieder um 5 addiert werden.

Also mein Vorschlag:

1#: wait(1) zu z.B. wait(-3) ändern oder
2#: Die Taste bis zum loslassen sperren





Und ob wirklich statt 5 nur 1 addiert wird, kannst du dann anhand von dem Panel mit den DIGITS leicht überprüfen (Hast du ja bereit schon richtig programmiert).


Viel Glück smile

Re: Anfängerfrage [Re: CHaP] #242737
12/25/08 11:31
12/25/08 11:31
Joined: Dec 2008
Posts: 30
Germany
Nexus90 Offline OP
Newbie
Nexus90  Offline OP
Newbie

Joined: Dec 2008
Posts: 30
Germany
Danke dir @CHaP,
klappt jetzt alles bestens.


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