Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - Quentin

#61
??? verstehe nicht ganz. ..\Compiler\platform\Include gibt es nur einmal für alle Platformen
#62
wenn ich das noch richtig in Erinnerung habe ...

du könntest deine Includes in ..\Compiler\platform\Include ablegen und diese dann mit
Code (glbasic) Select

#include <test.h>

einbinden.
Alternativ in deinem Projektverzeichnis, wo auch die .gbas Dateien liegen, dann mit
Code (glbasic) Select

#include "test.h"

Wäre vielleicht einen Versuch wert. Wobei ich das noch nie von der Kommandozeile aus probiert habe. Ggfs. wäre dann noch PATH entsprechend zu setzen.
#63
würde es so wie im 3D-ES machen. Stichwort Rekursion
(siehe Funktion EntityUpdateMatrix)

Pseudo-Code:
Code (glbasic) Select

function update2d( object2d )
{
    ....
    mach update Sachen mit object2d;
    für alle Kinder von object2d
    {
       update2d( object2d.child );
    }
}


oder so ähnlich
#64
mit
Code (glbasic) Select

CALLBACK FUNCTION func:

kannst du eine Funktion ja zumindest einmalig neu definieren
#65
see also command GETDESKTOPSIZE
#66
wieso widerlich? Ist doch nur gängige Praxis. Zur Zeit gilt es bei allen Firmen wohl als Volkssport, den Konkurrenten zu verklagen. Oracle gegen Google, Apple gegen Samsung ... Fast täglich kommen neue Klagen auf den Tisch. Was Google angeht: Das ein Suchmaschinen-Hersteller durch Werbung und "Daten-Hehlerei" (was passenderes fällt mir nicht ein) zu einer solchen Marktmacht kommen konnte, macht mir ehrlich gesagt etwas Angst, unabhängig davon, welche neuen Impulse diese Firma der EDV-Welt gegeben hat.
#67
Quote from: Markus on 2012-Apr-24
@Quentin
ich möchte keine kopie als Rückgabe

ja sorry, hatte ich übersehen, hattest du ja schon probiert.

Was dein "P" hier angeht:
lt. Hilfe
"Man muss "ref" nicht als LOCAL definieren. Das passiert automatisch. Jedoch ist "ref" nach dem zugehörigem "NEXT" nicht mehr gültig."

Das beantwortet wohl, warum du nach der FOREACH-Schleife nicht mehr auf dein P zugreifen kannst. Und wenn du unbedingt direkt mit dem Array arbeiten willst, ohne irgendwelche Kopieraktionen, wieso arbeitest du dann nicht mit einem Index.

Anstatt FOREACH einfache FOR-Schleife:
Code (glbasic) Select

FOR i = 0 TO LEN(Players[]) - 1
    Players[i].draw()
NEXT

// damit kannst du dann auch außerhalb der Schleife gezielt über den Index zugreifen
// und deine gezeigte FindPlayer-Funktion wäre überflüssig

Players[5].update()


#68
Meinst du sowas, dass die Funktion den Typen zurückliefert? Doch das geht schon. musst nur die Funktion entsprechend deklarieren:

Code (glbasic) Select

TYPE TPlayer
text$
ENDTYPE

GLOBAL players[] AS TPlayer
DIM players[3]

players[0].text$ = "Erster"
players[1].text$ = "Zweiter"
players[2].text$ = "Dritter"

LOCAL test AS TPlayer

test = get_player("Zweiter")
STDOUT test.text$
KEYWAIT


FUNCTION get_player AS TPlayer: text$
FOREACH p IN players[]
IF p.text$ = text$
RETURN p
ENDIF
NEXT
ENDFUNCTION
#69
ähh genau das kannst du doch damit machen?
Hier mal ein Beispiel:

Code (glbasic) Select


// GUI-Elemente, z.B. Label, Eingabefeld, pushbutton
TYPE TGuiElement
x%
y%
name$
content$
ENDTYPE

// Ein Dialog kann 1..n Gui-Elemente enthalten
TYPE TDialog
x%
y%
name$
items[] AS TGuiElement
ENDTYPE


// für das Hauptprogram benötigt man einen "GUI-Manager"
TYPE TGuiManager
dialogs[] AS TDialog
ENDTYPE


// jetzt mal ein paar GUI-Elemnte anlegne
LOCAL label AS TGuiElement
LOCAL inputfield AS TGuiElement
LOCAL checkbox AS TGuiElement

label.x = 0
label.y = 0
label.name$ = "LABEL"
label.content$ = "Eingabe:"

inputfield.x = 10
inputfield.y = 0
inputfield.name$ = "INPUTFIELD"
inputfield.content$ = ""

checkbox.x = 0
checkbox.y = 10
checkbox.name$ = "CHECKBOX"
checkbox.content$ = "X"

// diese packen wir in einen Dialog
LOCAL dialog AS TDialog

dialog.x = 0
dialog.y = 0
dialog.name$ = "DIALOG"
DIMPUSH dialog.items[], label
DIMPUSH dialog.items[], inputfield
DIMPUSH dialog.items[], checkbox

//... ggfs. weitere Dialog


// alle Dialog packen wir in unseren "Gui-Manager"
LOCAL guimgr AS TGuiManager
DIMPUSH guimgr.dialogs[], dialog

LOCAL y

WHILE TRUE

FOREACH dia IN guimgr.dialogs[]
y = 0
FOREACH item IN dia.items[]
PRINT item.name$, 0, y
PRINT item.content$, 100, y
INC y, 20
NEXT
NEXT

SHOWSCREEN

WEND
#70
so ganz kann ich dir nicht folgen. Worauf genau willst du hinaus.
In deinem Beispiel hast du eine rekursive Definition. Dem könnte man in deinem Beispiel nur dadurch entgehen, wenn man das Array mit den GUI-Elementen als statisch im Sinne von statischen C++-Klassenmembern definiert, was so in GLBasic imho nicht möglich ist.

Ausserdem bezweifle ich, dass der Eierlegende-Woll-Milch-Sau-TYPE wirklich sinnvoll ist.
#71
ups ja, hast recht, habs nur einfach so hingeschrieben ohne Editor :)
#72
Für sowas nimmt man sich normalerweise eine Manager-Klasse oder sowa in der Art.
Angenommen es gibt etliche GUI-Komponenten wie Textfeld, Eingabefeld, Listbox etc.
Diese könnte man in einen eigenen Typ (oder mehrere nach Bedarf) stecken

Code (glbasic) Select

TYPE TGuiElement
    name$
    ...
ENDTYPE


Ein Dialog wiederum kann 1..n Gui-Komponenten enthalten also z.B. so

Code (glbasic) Select

TYPE TDialog
    ....
    GuiElements as TGuiElement[]
   ....
ENDTYPE


im ganzen Programm kann man ja 1..n Dialog nutzen, wo man z.B. auch das Hauptfenster als Dialog betrachten könnte. Alle Dialog könnte man in einem GUI-Manager verwalten

z.B.
Code (glbasic) Select

TYPE TGuiManager
   ...
   dialogs as TDialog[]
   ....
ENDTYPE


Richtiges OOP haben wir ja leider/Gott sei Dank (je nach Standpunkt) in GLBasic nicht, aber mit dieser Art der Komposition könnte man es ggfs. auch lösen, denke ich.
#73
Mit Blender 2.6.x habe ich AC3D exportiert und dann mit dem GLBasic Konverter nach DDD gebracht. Das geht eigentlich ganz gut. Ich denke, der DDD-Exporter für Blender müsste noch mal überarbeitet werden.
#74
Bei einigen WIndows-Games gibts auch Ärger wg. UAC. Abhilfe schafft dort, das Spieleverzeichnis selbst für alle User offen zu machen (Berechtigung Vollzugriff für alles und jeden :))

Fall bereits irgendwelche Files für das Game unter c:\users\<user>\AppData\..schlagmichtot.. abgelegt wurden, diese löschen. Dann sollte es wieder funzen.

Die UAC-Einstellungen allgmein würde ich aber nicht gerne anfassen, die machen schon Sinn.