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

Topics - D2O

#141
Hmm, ich weis auch nicht was ich wieder angestellt habe.
Im folgenden Code wird mir das Bmp Bild nicht angezeigt aber mit dem Png geht es?

Hier mal die Bilder:
http://www.deuteriumoxid.com/glbasic/hero.bmp
http://www.deuteriumoxid.com/glbasic/hero.png

und der code.
Code (glbasic) Select
DIM bild[34]
FOR i = 0 TO 33
bild[i] = i
NEXT

LOADSPRITE "hero.bmp", 200
FOR i = 0 TO 33
SPRITE 200,-i*32,0
GRABSPRITE bild[i],0,0,32,32
BLACKSCREEN
NEXT


WHILE TRUE
INC c,1
IF c > 33 THEN c = 0

SPRITE bild[c],0,0
SHOWSCREEN

WEND
#142
Super Gernot das das STATIC gekommen ist,
damit kann man ansich Globale Variablen super Abkapseln.

Als Beispiel eine Frame Anzeige.
Voher:
Code (glbasic) Select
GLOBAL fps_time,fps_counter,fps,fps_temp


FUNCTION updatefps:
fps_time = GETTIMERALL()
fps_counter = fps_counter + 1
IF (fps_time-fps_temp)>1000
fps_temp = fps_time
fps = fps_counter
fps_counter = 0
ENDIF
       Return fps
ENDFUNCTION
Und jetzt mit STATIC ohne die "gefahr" der Globalen Variablen:
Code (glbasic) Select
FUNCTION getfps:

STATIC fps_time,fps_counter,fps,fps_temp
fps_time = GETTIMERALL()
fps_counter = fps_counter + 1
IF (fps_time-fps_temp)>1000
fps_temp = fps_time
fps = fps_counter
fps_counter = 0
ENDIF

RETURN fps
ENDFUNCTION
Danke
#143
Hi, wollte den Thread hier,http://www.glbasic.com/forum/viewtopic.php?id=414, nicht missbrauchen
daher ein neuer.

Habe hier beim code testen diese Fehlermeldung bekommen, bzw. einmal gehts einmal nicht.

Ok.
 Wenn ich im folgendem Code die Function vor der Hauptschleife schreib gibts ne fehlermeldung und makiert wird
die "Print" zeile.

Quote_______________________________________
*** Configuration: WIN32 ***
precompiling...

GPC - GLBasic Precompiler V.2007.050 - 3D, NET
compiling...
test.gbas (561 B )
"test.gbas"(28) error : command not inside function or sub
Steht die function nach der schleife, gehts.
Code (glbasic) Select
GLOBAL loadimagecounter
loadimagecounter = 0
FUNCTION f_loadimage:

LOADSPRITE l_path,loadimagecounter
INC loadimagecounter,1

RETURN loadimagecounter -1
ENDFUNCTION
//
//


WHILE TRUE
PRINT "Hallo",10,10
SHOWSCREEN
WEND
#144
Hi all, habe heute mal mit der Live version von Knoppix etwas herum gespielt.
Dort gibt es zwei Internet Browser, einmal den Kongwerus(oder so ähnlich ;) ) und noch einer mit so nem Frosch?.
Habbe mir die namen nicht so genau angeschaut.
Naja, auf jedenfall wenn ich dort dir Url von Glbasic eingebe, schalten sich beide Browser ohne irgendeine meldung ab.

Hmmm, keine ahnung ob es an den Browsern liegt oder an der Hompage,
habt Ihr dort auch solche Probleme?
#145
Tach alle,
ich habe mir gedacht, da man ja, z.B. das mit Filerect gezeichnete mit Grabsprite als Sprite speichern
und anzeigen kann, das auch mit geladenen Bildern gehen sollte.

Die Idee ist, da es viele Bilder/Animationen gibt die als Tile in einem grossen Bild gespeichert sind, zu Laden,
als Sprite zu zeichnen (in den Backbuffer) und mit Grabsprite in einzelne Sprite zu wandeln.

Naja, blieb nur beim versuch :(
Irgendwie schein ich hier keinen zugriff auf den Buffer den ich dafür brauch, zu haben.

Hier mal mein kleiner Code:
Code (glbasic) Select
// --------------------------------- //
// Project: Tileloader
// By Fabio "D²O" Soddu
// Start: Sunday, January 28, 2007
// IDE Version: 4.051


DIM joe[24] // feld für 24 einträge erstellen
GLOBAL joe_ani = 0 //ein counter für die Animation
LOADSPRITE   "gfx/joe64.png",200 // Sprite laden, das Bild ist 64 hoch und 24*64 lang

SPRITE 200,0,0 // Sprite wird in den Backbuffer gezeichnet

FOR i = 0 TO 23
joe[i] = i  // Spritenummern vergeben
GRABSPRITE joe[i],64*i,64,64,64 // Sprite kopieren und um 1 Tile(64pix) versetzen
NEXT

/////////////////////////// MAIN START ///////////////////////////////////////////////
WHILE TRUE
MOUSESTATE my,my,b1,b2
IF b1 THEN  joe_ani = joe_ani + 1 //Kontoll abfrage für joe_ani
IF joe_ani > 23 THEN joe_ani = 1

SPRITE joe[joe_ani],0,0 // hier sollte das "gegrabte" Sprite gezeichnet werden
SHOWSCREEN

WEND

/////////////////////////// MAIN ENDE ///////////////////////////////////////////////
#146
Hallo alle,

hier mal schnell ein Simples Jump and Run.
Das ganze ist ohne sound.
Gesteuert wird mit den Pfeiltasten und Spacetaste.
Level gibts nur eins, dafür ist es zufallsgeneriert.
Die gelben klötzchen geben punkte.
Klick mich:
#147
Hi,
wenn man wissen möchte aus welcher richtung ein Objekt kommt
ist ATAN() eine grosse Hilfe, nur muss man auch wissen wie man es einsetzt.
Hier ein kleines Beispiel:

Code (glbasic) Select
// --------------------------------- //
// Project: Atan
// Start: Saturday, January 27, 2007
// IDE Version: 4.051


// Zwei bilder erstellen und laden
DRAWRECT  0,0,32,32,RGB(0x80, 0xff, 0x80)
GRABSPRITE 0,0,0,32,32

BLACKSCREEN

DRAWRECT  0,0,32,32,RGB(0xfc, 0x83, 0xb6)
GRABSPRITE 1,0,0,32,32


//Mainschleife
WHILE TRUE
// Mouskoordinaten zuweisen
MOUSESTATE mx,my,b1,b2

// Bild 0 hat eine feste Koordinate
DRAWSPRITE 0,300,250
// Bild 1 hängt an der Mousekoordinate
DRAWSPRITE 1,mx,my

// Mod((Atan(yBild0 - yBild1,xBild0 -xBild1)+360),360) 
winkel =  MOD((ATAN(250-my,300-mx)+360),360)

// Linie zu den Eckpunkten zeichnen
DRAWLINE 300,250,mx,my,RGB(255,0,0)
// Den Winke ausgeben
PRINT winkel,mx+38,my


SHOWSCREEN
WEND
#148
Hi,
um etwas zu üben habe ich ein kleines Programm gemacht.
Es ist recht simpel aber kann veranschaulichen wie SIN() und COS()
sich auf ein SPRITE auswirken.
Es wird mit der Mouse und der linken Mousetaste gesteuert.

Hier werden gleich die Werte im Befehl Sprite angezeigt und kann sehen wie es sich darauf auswirkt.
Warum das ganze?
Naja, ich habe selber so meine Probleme damit gehabt und denke das man das hier ganz gut erkennen kann
wie es funktioniert.

Klick mich und ich werd gross:


Und hier gibts den Download.

Edit//

Oops, in der Text ausgabe sollte nicht Hub X/Y sondern Radius X/Y stehen.
Wurde geupdatet, gleicher Download.
#149
Ich weis, ziemlich viel fragen von mir :)

Bei folgendem Code wird ein Gitter gezeichnet,
beim Druck der Spacetaste wird mit meiner Function Keyhit() die Function f_savescreen() aufgerufen.
Hier wird überprüft ob die datei schon vorhanden ist, wenn nicht-> Bildspeichern, wenn ja-> Counter solange hochzählen
bis die Datei nicht vorhanden ist und dann speichern.

Ok, das funktioniert im grunde auch, meistens ;)
Aber ab und zu scheint die Function Keyhit() immer 1 zurück zugeben und dadurch werden ratzfatz mal schnell 200 bildchen geschossen und gespeichert :)

Ist es hier möglich dass der Tastaturbuffer nicht sauber gelöscht wird?
Oder liegt das am Code?
Gibts hier Function dazu den buffer zu löschen und ich hab in über sehen?

Code (glbasic) Select
// --------------------------------- //
// Project:
// Start: Sunday, January 21, 2007
// IDE Version: 4.051



@Variabel_fuer_Bildschrim:
GLOBAL winx = 1024
GLOBAL winy = 768
GLOBAL winmode = 0
GLOBAL Bildfps = 75

@Bildschirm_einstellungen:
SETSCREEN winx,winy,winmode
LIMITFPS Bildfps


@varibalen_fuer_fps:
LET fps,fps_counter,fps_time,fps_temp

@Array_fuer_keyhit:
DIM Push123456[20][3]

WHILE TRUE
//-------------Frames berechnen-------------------------
fps_time = GETTIMERALL()
fps_counter = fps_counter + 1
IF (fps_time-fps_temp)>1000
fps_temp = fps_time
fps = fps_counter
fps_counter = 0
ENDIF
//-------------Gitter zeichnen-------------------------

f_gitter(32)

IF keyhit(57,0) = 1 THEN f_savescreen("32gitter")




//-----------------Textausgabe-------------------

PRINT fps+"/sec.",10,10


SHOWSCREEN
WEND





FUNCTION f_gitter:l_tile
LOCAL l_ix,l_iy

FOR l_ix = 0 TO winx/l_tile
DRAWLINE l_tile*l_ix,0,l_tile*l_ix,winy,RGB(255,255,255)

NEXT

FOR l_iy = 0 TO winy/l_tile
DRAWLINE 0,l_tile*l_iy,winx,l_tile*l_iy,RGB(255,255,255)
NEXT




ENDFUNCTION

FUNCTION keyhit :keyhit_in,keyhit_counter

LOCAL keyhit_counter
LOCAL keyhit_in

Push123456[keyhit_counter][0] = KEY(keyhit_in)
IF Push123456[keyhit_counter][0] = 1 AND Push123456[keyhit_counter][1] = 1 THEN Push123456[keyhit_counter][2] = 0
IF Push123456[keyhit_counter][0] = 1 AND Push123456[keyhit_counter][1] = 0
Push123456[keyhit_counter][2]= 1
Push123456[keyhit_counter][1] = 1
ENDIF
IF Push123456[keyhit_counter][0] = 0 AND Push123456[keyhit_counter][1] = 1 THEN Push123456[keyhit_counter][1] = 0
RETURN Push123456[keyhit_counter][2]
ENDFUNCTION



FUNCTION f_savescreen:l_name$
LOCAL l_count
LOCAL l_oki
LOCAL l_end = FALSE

WHILE l_end = FALSE
        l_oki = DOESFILEEXIST(l_name$+l_count+".bmp")

IF l_oki = FALSE
SAVEBMP l_name$+l_count+".bmp"
l_end = TRUE  
  ENDIF
 
 
  IF l_oki = TRUE
l_count = l_count + 1
ENDIF
WEND
ENDFUNCTION
#150
Hi, was mir jetzt schon paarmal passiert ist, das ich bei der Debugger ausgabe in der IDE die Fehler vom verherigen Projekt mit drin hatte.
Aufgefallen ist mir das beim Probieren meiner Keyhit function.

Hier mache ich bei änderungen gerne mal ein neues Projekt, und wenn dort beim Compillieren ein fehler ist, zeigts mir auch den Fehler
vom vorherigen projekt an.
Nicht immer, ist aber schon einige mal passiert.

Die lösung die ich hier nutze ist, das ich den GLbasic Ordner im Temp verzeichnis lösche.

Ist das bei Euch auch so?
#151
Hi,
ich wollte einfach mal eine Keyhit function schreiben, hier soll nur überprüft werden ob eine Taste getrückt
wurde.
Nur funktioniert das ganze nur für eine Taste da hier globale Variablen genutzt werden, möchte ich mehre Tasten überprüfen
müsste
ich für jede Taste eine Function mit Variablen erstellen.

Hier mal den Code:
Code (glbasic) Select
WHILE  TRUE
  links = KEY(203)
 // rechts = KEY(205)

  PRINT keyhit(links),10,300
//  PRINT keyhit(rechts),10,320

SHOWSCREEN
WEND


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

FUNCTION keyhit:keyhit_a
  //LOCAL keyhit_a
  //LOCAL keyhit_out
  //LOCAL keyhit_controll


IF keyhit_a = 1 AND keyhit_controll = 1 THEN keyhit_out = 0

IF keyhit_a = 1 AND keyhit_controll = 0
keyhit_out = 1
keyhit_controll = 1
ENDIF

IF keyhit_a = 0 AND keyhit_controll = 1 THEN keyhit_controll = 0


RETURN keyhit_out

ENDFUNCTION
Wie kann ich es anstellen eine Function zu schreiben um sie für mehrer Tasten zu nützen?

Type?
Hier wäre das nicht schlecht wenn gehen würde.

Code (glbasic) Select
Type Tkeyhit
 keyhit_a
 keyhit_out
 keyhit_controll

method keyhit:keyhit_a



IF keyhit_a = 1 AND keyhit_controll = 1 THEN keyhit_out = 0

IF keyhit_a = 1 AND keyhit_controll = 0
keyhit_out = 1
keyhit_controll = 1
ENDIF

IF keyhit_a = 0 AND keyhit_controll = 1 THEN keyhit_controll = 0

RETURN keyhit_out
Endmethod
Endtype

Edit:

So, hab das ganze nochmals versucht mit Type und Arras in diesem Type,
Code (glbasic) Select
// --------------------------------- //
// Project:
// Start: Saturday, January 20, 2007
// IDE Version: 4.051



WHILE  TRUE
links = KEY(203)
rechts = KEY(205)


PRINT keyhit(links,1),10,300
PRINT keyhit(rechts,2),30,300

SHOWSCREEN
WEND





FUNCTION keyhit :keyhit_in,keyhit_counter
    LOCAL keyhit_in
LOCAL keyhit_counter
LOCAL mykey AS Tkeyhit



mykey.in[keyhit_counter] = keyhit_in

IF mykey.in[keyhit_counter] = 1 AND mykey.controll[keyhit_counter] = 1 THEN mykey.out[keyhit_counter] = 0

IF mykey.in[keyhit_counter] = 1 AND mykey.controll[keyhit_counter] = 0
mykey.out[keyhit_counter] = 1
mykey.controll[keyhit_counter] = 1
ENDIF


IF mykey.in[keyhit_counter] = 0 AND mykey.controll[keyhit_counter] = 1 THEN mykey.controll = 0

RETURN mykey.out[keyhit_counter]

ENDFUNCTION

TYPE Tkeyhit
in[25]
out[25]
controll[25]
ENDTYPE
bekomme aber nun folgende Fehlermeldung.
Quote_______________________________________
*** Configuration: WIN32 ***
precompiling...

GPC - GLBasic Precompiler V.2006.354 - 3D, NET
compiling...
keyhit.gbas (954 B )
Wordcount:19 commands

compiling:
D:\temp\glbasic\gpc_temp0.cpp: In function `DGInt __GLBASIC__::keyhit(DGInt, DGInt)':
D:\temp\glbasic\gpc_temp0.cpp:33: error: no match for 'operator=' in 'mykey.__GLBASIC__::Tkeyhit::controll = 0'
C:/Basic/GLBasic/Compiler/platform/Include/glb.h:272: note: candidates are: __GLBASIC__::DGIntArray& __GLBASIC__::DGIntArray::operator=(const __GLBASIC__::DGIntArray&)

linking:
g++.exe: gpc_temp0.o: No such file or directory
*** FATAL ERROR - Bitte die Compiler-Ausgabe ins Forum kopieren
_______________________________________
*** Fertig ***
Zeit: 0.8 sek
Erstellen: 0 erfolgreich, 1 fehlgeschlagen
#152
Moin alle, sodele der ein/umstieg geht so langsam vorran ;)
Ich werde hier mal so meine eintrücke und vorschläge (Bitte als Konstruktive Kritik ansehen) Posten:

setscreen:
Toll das der befehl "setscreen" gekommen ist, nur für mich etwas zu halbherzig.
Er sollte für mich so aussehen "setscreen Breite,Höhe,Fenste/Vollmodus,[Optional Frameeinstellung,standart 60Hz]

MOUSESTATE:
So wie ich das sehe kann man mit "MOUSESTATE mx, my, b1,b2" bzw. generell nur zwei mousetasten abfragen.
Liber wäre es mir so "MOUSESTATE mx, my", "Mousebut([0...5..usw])"

FILLRECT:
Hmm hier habe ich gerade ne Halbe stunde gebraucht bis ich das kapiert habe(bin nicht der schnellste ;)  )
Meiner meinung ist diese lösung nicht gerade Benutzerfreundlich.
Das "FILLRECT 100,100, 120, 120, RGB(0, 255, 255)" lese ich als erstes so,
X Position = 100
Y Position = 100
Länge in pixel = 120
Höhe in pixel = 120

Was für mich einfacher ist, sicher auch für den ein oder anderen einsteiger.
Gemeint wird hier aber,
X Pposition = 100
Y Position = 100
Länge = 20 (Entpunkt Koordinate X = Xposition + 20pixel)
Höhe = 20 (Entpunkt Koordinate Y = Yposition + 20pixel))

Also verständlich wäre für mich hier:
FILLRECT Xpos,Ypos,Breite in pixel,Höhe in pixel,Farbe

Ich bleibe dran :)

Edit die 1.
Macht spass.
Habe aber eben festgestellt das es garkein "Include" gibt  :/
Wäre nicht schlecht bei grösseren sachen, Variablen oder Funktionen auslagern.
Oder hab ich was übersehen?
#153
Hi, Möchte mich jetzt einfach mehr mit GLBasic beschäftigen, jetzt sowieso mit dem Top angebot wo gerade von Gernot läuft .

So, beim folgenden code,
Code (glbasic) Select
// Noch DEMO-VERSION :)
//

LOCAL ende = 0

//
WHILE ende = 0
PRINT "Mainschleife", 300,300
IF KEY(57)  //Spacetaste
ende = menue
ENDIF

SHOWSCREEN
WEND

//


FUNCTION menue:
LOCAL menueende = 0
LOCAL mx,my,b1,b2,b3,b4
LOCAL ende = 0
WHILE menueende = 0

MOUSESTATE mx, my, b1,b2


FILLRECT 0, 100, 100, 20, RGB(0, 255, 255)
PRINT "Zurück in die Mainschleife",0,100

FILLRECT 200, 100, 100, 20, RGB(50, 255, 110)
PRINT "Beenden",200,100

FILLRECT mx,my,5,5,RGB(255,255,255)

IF mx > 0 AND mx < 100 AND my > 100 AND my < 120 AND b1 THEN menueende = 1
IF mx > 200 AND mx < 300 AND my > 100 AND my < 120 AND b1 THEN ende = 1




SHOWSCREEN
WEND

RETURN ende
ENDFUNCTION
bekomme ich diese meldung,
Quote from: "IDE"*** Configuration: WIN32 ***
precompiling...

GPC - GLBasic Precompiler V.2006.354 - 2D, WIN32
compiling...
print_rect.gbas (1 KB)
"print_rect.gbas"(31) warning : probably unassigned variable : menue
Wordcount:26 commands

compiling:
In file included from D:\temp\glbasic\gpc_tempg.cpp:2:
D:\temp\glbasic\/gpc_temp.h:7: error: `DGInt __GLBASIC__::menue()' redeclared as different kind of symbol
D:\temp\glbasic\/gpc_temp.h:6: error: previous declaration of `DGInt __GLBASIC__::menue'
D:\temp\glbasic\/gpc_temp.h:6: error: previous non-function declaration `DGInt __GLBASIC__::menue'
D:\temp\glbasic\/gpc_temp.h:7: error: conflicts with function declaration `DGInt __GLBASIC__::menue()'
In file included from D:\temp\glbasic\gpc_temp0.cpp:1:
D:\temp\glbasic\/gpc_temp.h:7: error: `DGInt __GLBASIC__::menue()' redeclared as different kind of symbol
D:\temp\glbasic\/gpc_temp.h:6: error: previous declaration of `DGInt __GLBASIC__::menue'
D:\temp\glbasic\/gpc_temp.h:6: error: previous non-function declaration `DGInt __GLBASIC__::menue'
D:\temp\glbasic\/gpc_temp.h:7: error: conflicts with function declaration `DGInt __GLBASIC__::menue()'
D:\temp\glbasic\gpc_temp0.cpp: In function `DGInt __GLBASIC__::menue()':
D:\temp\glbasic\gpc_temp0.cpp:41: error: `DGInt __GLBASIC__::menue()' redeclared as different kind of symbol
D:\temp\glbasic\/gpc_temp.h:6: error: previous declaration of `DGInt __GLBASIC__::menue'
D:\temp\glbasic\/gpc_temp.h:6: error: previous non-function declaration `DGInt __GLBASIC__::menue'
D:\temp\glbasic\gpc_temp0.cpp:41: error: conflicts with function declaration `DGInt __GLBASIC__::menue()'

linking:
g++.exe: gpc_tempg.o: No such file or directory
g++.exe: gpc_temp0.o: No such file or directory
*** FATAL ERROR - Bitte die Compiler-Ausgabe ins Forum kopieren
_______________________________________
*** Fertig ***
Zeit: 0.8 sek
Erstellen: 0 erfolgreich, 1 fehlgeschlagen
Hier scheint irgend was mit der Function Menue nicht zu passen, nur was?
Dann noch ne frage,
beim erstellen der function kann man anscheinend keine Standartwerte eintragen,
BS:    function go: min = 0, max = 100
            for i = min to max
              /// Zähl irgendwas
              next
             endfunction

oder habe ich da was verpasst?
#154
Hi, ich habe beim editor  mit dem outfit etwas gespielt, hmmmm, hab da wohl nen Bock abgeschossen ;)

Nun ja, wie kann ich wieder die Standartfarben herstellen, finde hier nirgends eine Datei wo die farben gespeicht sind.
Habe GLBasic auch mal deinstalliert und den Install Ordner komplett gelöscht.
Nach der neu installation sind meine (Schrecklich Blind machenden) Editor farben immer noch da :(

Danke schonmal für nen Tipp.


Dann noch was für Gernot:
Wäre nicht schlecht wenn man hier Farbeinstellungen speichern und laden könnte.
#155
HI, wusste nicht genau wo ich es hier hin Posten sollte, denke aber das es so schon past ;)


Das wird wahrscheinlich einige Interessieren.

Auf der Heft CD von der C'T Nr.20 gibts die Betriebssytem Emulations Software VMware 4.5 als Spezielle Vollversion.
Sie ist für 360 Tage voll nutzbar.

So lassen sich dann über einen Virtuellen Rechner andere Betriebssysteme
installieren und ausfüren Smile

Wer also z.B seine GLBasic Programme unter linux testen wollte sich aber scheute es Paralel zu Windows zu installieren kann es nun über VMware installieren und Linux unter Win im Fenstermodus laufen lassen.

Ach, das Heft Kostet gerademal 3 Euro.
#156
Hi,
wenn ich den code in einen Fenster laufen lasse wird der string "Hallo" richtig angezeigt.
Sobal ich ihn aber im vollbild laufen lasse, wird nur das "H" voll angezeigt,
bei anderen buchstaben ist irgendwie das letzte viertel unten abgeschnitten ?

WinXP Pro , 762 MB Ram, DX 9.0b, ATI 9800 SE 265bit 128MB, Catalyst 04.4

Code (glbasic) Select
GLOBAL x = 1
GLOBAL y = 1
GLOBAL gox = 1
GLOBAL goy = 2

WHILE bNOT( KEY(1))

x = x + gox
y = y + goy

IF x > 1024 THEN gox = -1
IF x < 0 THEN gox = 1
IF y > 768 THEN goy = -1
IF y < 0 THEN goy = 1

PRINT "Hallo",x,y
SHOWSCREEN

WEND
END