 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
King-01 gesperrt

Anmeldungsdatum: 26.02.2007 Beiträge: 351
|
Verfasst am: 26.02.2007, 20:51 Titel: Fragen zu eigenem Spiel |
|
|
Hi, hier bin ich wieder und hab ne frage zu FreeBasic:
Wie kann man in FreeBasic Sprites anzeigen? Kann mir jemand das mal genau erklären?
Und warum kann ich keine Bilder anzeigen?
ich führe ganz normal den code vom tutorial ( http://www.freebasic.de/FBtuts.php?zeig=tuts&view=Grafik_Grundlagen-Grafiken~anzeigen.txt ) aus:
Code: |
screen 18
dim shared bild(100000) AS UBYTE
bload "ampeln.bmp", varptr(bild(0))
put (0,0), bild
sleep |
und dann kommt zwar das Fenster des Programms, aber die Fehlermeldung:
Zitat: | test.exe hat ein Problem festgestellt und muss beendet werden... | (die fehlermeldung kennt ihr bestimmt)
leider weiß ich das passwort von meinem Webspace nicht mehr und
konnte keinen Screenshot hochladen.
die ampeln.bmp hat 256 Farben, ist größer als 100KB und ist im Verzeichnis der exe-Datei.
Warum geht das nicht?
Zuletzt bearbeitet von King-01 am 02.03.2007, 18:56, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 26.02.2007, 20:59 Titel: |
|
|
Erstmal ist die Methode veraltet. Such im Board mal nach "ImageCreate".
Und dann: du definierst den Speicherplatz nicht ausreichend groß, wenn die BMP größer als 100KB ist.
Nächste Sache: Screenshots etc. können bei http://www.imageshack.us hochgeladen werden. Poste einen Thumbnail-Link hier.
Und zuletzt: (an alle, nocheinmal xD) sollte man eigentlich Leute wieder hier rein lassen, die freiwillig gegangen sind, weil sie etwas gegen uns hatten? (Eine rein moralische Frage.) _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Elvis

Anmeldungsdatum: 01.06.2006 Beiträge: 818 Wohnort: Deutschland, BW
|
Verfasst am: 26.02.2007, 21:10 Titel: |
|
|
Also ich erinner mich trübe daran, wie er zuerst sagte, er wolle wieder ein
"guter Mensch" sein, und dann eben wieder abgezischt ist. - Wie Infection93.
Daher würde ich ihm lediglich diese Frage gewären.
Ich meine auch mich zu erinniern, dass er mir einmal in einer PN für von mir
gezeigter Unterstützung gedankt hat und versprchen hat, nicht böses mehr
zu tun. Es kann aber auch gut sein, dass ich das mit Infection93 verwechsel!
Allerdings würde ich ihn nicht sofort wieder kicken, solange es bei dieser
Frage bleibt, oder vielleicht in zwei Monaten noch eine.
Außer er will wieder in QBasic ein OS proggen...
EDIT: Hab gerad entdeckt, dass im Off-Topic schon ein Thread aufgemacht
wurde...
Grüße, Elvis |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 26.02.2007, 21:59 Titel: |
|
|
Elvis hat Folgendes geschrieben: | Ich meine auch mich zu erinniern, dass er mir einmal in einer PN für von mir
gezeigter Unterstützung gedankt hat und versprchen hat, nicht böses mehr
zu tun. Es kann aber auch gut sein, dass ich das mit Infection93 verwechsel!  | ..ja, wenn man älter wird..
Wenn du dir aber nicht sicher bist, ist es nicht okay, über ihn zu meckern.. _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 26.02.2007, 22:53 Titel: |
|
|
Elvis hat Folgendes geschrieben: | ...Außer er will wieder in QBasic ein OS proggen... lachen durchgeknallt ... |
Naja, ne, jetz isser ja bei FB  |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 26.02.2007, 23:32 Titel: |
|
|
nur mal so dass es nicht scheint, wir wären nicht kompetent
Code: |
screen 18
Dim Bild as ubyte ptr 'pointer
Bild = ImageCreate(64,64) '64x64 pixel groß
Bload "datei.bmp", bild
|
für sprites dürften dich vor allem die neuen parameter bei PUT interessieren. im gegensatz zu Qbasic kannst du hier auch noch folgende anweisungen verwenden:
Code: |
put(100,100),bild,alpha,<transparenzgrad, 0 = transparent, 255 = voll sichtbar>
put(100,100),bild,trans
|
Bei Trans ist anzumerken, dass in 8- oder 4bit-modi immer COLOR 0 die transparente farbe ist. in Höheren farbmodi wie 32 bit ist es immer die farbe rgb(255,0,255), Pink. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 27.02.2007, 01:55 Titel: |
|
|
Code: |
'800x600x24bpp - 3Screens (0-2)
Screen 19,24,3
'Grafik Screen
Screenset 2
'das zu ladene Sprite... praktisch zum testen verwende allerdings gern meine eigenen Formate
bload "womanb.bmp"
'Screen 0 und 1 für flimmerfreie Animationen und Bildaufbau...
dim shared as ubyte Edit_Scr,View_Scr
Edit_Scr=1:View_Scr=0
'Image Pointer für Sprite
Dim Sprite as any ptr
'Sprite_Timer.. wiedergabe verzögerung
Dim Sprite_Timer as double
'---
Dim Animation as String
Dim ani
'Image
Sprite=imagecreate(67,77)
'Animationsabfolge
animation$=chr$(0,1,2,3,3,3,3,3)
'wiederholung bis ESC
while inkey$<>chr$(27)
if timer-sprite_timer>0.16 then
if ani=Len(animation) then ani=0
ani=asc(mid$(animation,ani+1,1))
sprite_timer=timer
ScreenSet 2
get (ani*67,0)-(66+(ani*67),76),sprite
ScreenSet Edit_Scr
Line (0,0)-(799,599),&h00,bf
put (100,100),sprite,trans
ani=ani+1
ScreenSet ,Edit_Scr
Swap Edit_Scr,View_Scr
end if
wend
imagedestroy(sprite)
end
|
weiss grad net wie ich hier 'n Bild einfügen kann, sonst könnte ich Dir mein Test-Sprite zur besseren erklärung mitschicken....[/img] |
|
Nach oben |
|
 |
King-01 gesperrt

Anmeldungsdatum: 26.02.2007 Beiträge: 351
|
Verfasst am: 27.02.2007, 16:06 Titel: |
|
|
Danke. Ihr habt mir weiter geholfen.
Aber das erste Beispiel von Jojo, hat bei mir irgendwie nix angezeigt...
edit:
Im Oma-Tutorial (3. Teil) stehts drin.
Ich musste das Beispiel nur etwas abändern.
Code: |
SUB test1
DIM img1 AS ANY PTR
SCREEN 18,24
img1 = IMAGECREATE(640, 400)
BLOAD "ampeln.bmp",img1
PUT (1,1),img1,PSET
SLEEP
IMAGEDESTROY img1
END SUB
test1
sleep
|
ich hab da noch hinzugefügt, dass das Sub ausgeführt wird und ein sleep.
http://www.askos.de/tutorial/kap36.htm#kap2
edit2:
Wie kann ich solche Fraben definieren, die dann rausgefiltert werden?
Also bei BlitzBaisc ist das ja MaskImage, aber in FreeBasic? |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 27.02.2007, 21:21 Titel: |
|
|
bezüglich meinem beispiel gibt es diese möglichkeit:
screen 18 stellt 256 farben ein. wenn du ein bmp mit höherer bit-zahl lädst, wird's nicht angezeigt. mehr farben erreichst du, wie schon oben beschrieben, durch screen 18,16 oder screen 18,32.
btw, noch ein tipp: mache den puffer, den du mit IMAGECREATE erstellst, NIEMALS (wirklich! niemals!) größer ODER kleiner als das tatsächliche bild. mache ihn ganz genau so groß. ich hatte selbst mit buffern, die etwas größer waren, mal ziemliche probleme und keiner wusste, wo das problem im programm war....
bezüglih "rausgefilterter farben": siehe meinen ersten post mit dem TRANS-beispiel. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
King-01 gesperrt

Anmeldungsdatum: 26.02.2007 Beiträge: 351
|
Verfasst am: 28.02.2007, 15:30 Titel: |
|
|
Bei trans kommt keine Fehlermeldung, aber bei rgb:
Da der Code:
Code: |
sub screeninit()
'transparentfarbe: Rot: 255, Grün: 100, Blau: 120
cls
screen 18,32
rgb (255,100,120)
end sub
sub bg_show()
dim bg as any ptr
bg = imagecreate(640,480)
bload "dschungel.bmp",bg
put (1,1),bg,pset
sleep
imagedestroy bg
end sub
sub fkreuz_show()
dim fk as any ptr
fk = imagecreate(30,30)
bload "Fadenkreuz.bmp",fk
put (50,50),fk,trans
sleep
imagedestroy fk
end sub
|
Fehlermeldung:
Code: |
Invalid data types
rgb (255,100,120)
^
|
Könnt ihr mir helfen?
edit:
Noch eine Frage:
Wie heißen die Koordinaten der Maus in Freebasic? In BlitzBasic heißen die ja MouseX und MouseY. |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 28.02.2007, 16:02 Titel: |
|
|
Erst wollt ich sagen "such mal nach getmouse". Aber da post ich dann doch lieber'n Beispiel, will die kurzzeitige Idylle hier nicht zerstören.
Code: |
GetMouse MausXPos, MausYPos, MausRad, MausButtons
|
Müsste eigentlich alles erklären. Probier mal rum, die einzelnen Werte bei Veränderungen ausgeben zu lassen. Insbesondere solltest du dir mal die Maus-Rad- und die Maus-Button-Werte anschauen.  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
King-01 gesperrt

Anmeldungsdatum: 26.02.2007 Beiträge: 351
|
Verfasst am: 28.02.2007, 16:08 Titel: |
|
|
Ok, danke.
edit:
Und wie kann man den Mauscursor "verkleiden"? Also wie kann ich es machen, dass wenn der Mauszeiger über dem Fenster von FreeBasic ist, dass dann anstelle des standart windows mauszeigers das bild "Fadenkreuz.bmp" angezeigt wird?
edit2:
Zur Mauseinbindung: hab gerade das: http://forum.qbasic.at/viewtopic.php?t=3036&highlight=getmouse entdeckt. Früher wusste ichs noch  |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 28.02.2007, 18:56 Titel: |
|
|
Setmouse ,,0 schaltet den cursor aus (setmouse ,,1 wieder an). die beiden kommas stehen für die leer gelassenen x-und y-werte. du kannst dann PUT(MouseX,MouseY), DeinCursor,Trans verwenden, um nen eigenen zu verwenden.
bezüglich deines rgb-problem: RGB ist kein befehl. RGB liefert dir ein integer zurückt, das den farbcode enthält.
Farbe = RGB(0,0,128) würde z.B. einen wert für ein blau mit halber intensität zurückliefern, und diesen wert könnenst du z.B. in LINE, CIRCLE, usw. verwenden:
Line (0,0)-(100,200), RGB(0,0,128)
wie ich schon gesagt habe, es gibt nur EINE transparente farbe, und die ist festgelegt. in screenmodi über 8 bit ist es pink mit dem farbwert 255,0,255. in 8 bit und darunter ist es farbe 0. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
King-01 gesperrt

Anmeldungsdatum: 26.02.2007 Beiträge: 351
|
Verfasst am: 28.02.2007, 21:50 Titel: |
|
|
Ok, die der Cursor wird schonmal ausgeblendet. Aber:
1. Die Farbe 255,0,255 wird nicht ausgeblendet (hab 32Bit Fabrtiefe) und das Fadekreuz folgt nicht der Maus.
Hier der Code: Code: |
dim shared bg as any ptr
dim shared fk as any ptr
sub screeninit()
cls
screen 18,32
end sub
sub bg_show()
PUT (1,1),bg,PSET
end sub
sub bg_load()
bg = IMAGECREATE(640,480)
BLOAD "dschungel.bmp",bg
end sub
sub fk_show()
put (MouseX,MouseY),fk,trans
end sub
sub fk_load()
fk = imagecreate(50,50)
bload "Fadenkreuz.bmp",fk
end sub
sub mouseinit()
getmouse MouseX, MouseY, MouseRad, MouseButtons
setmouse ,,0
end sub
screeninit
mouseinit
bg_load
fk_load
bg_show
x=1
for x=1 to 10000000000
fk_show
next x
sleep
|
ok, am schluss ist es etwas unstrukturiert.... aber was ist da falsch?
2. Bei einem FB-Programm ist doch meistens ein Hauptfenster und ein DOS-Fenster. Wie kann ich jetzt sachen auf dem DOS-Fenster ausgeben?
Ich will da hinschreiben wenn der Hintergrund geladen wird: "Hintergrund wird geladen" oder so.
--------edit:---------
Das mit der Transparentfarbe geht doch. Nur Paint nicht. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 28.02.2007, 21:53 Titel: |
|
|
aaalso,
die mauskooridnaten musst du in der sub fk_show erst wieder NEU auslesen. also die getmouse-zeile da rein kopieren (die variablen werden nicht autoamtisch upgedatet). kannst du mal das bild, das transparenz haben soll, hochladen? vlt ist deine farbe irgendwie falsch oder so...
zu 2) schau mal in der referenz nach Open CONS oder Open "CONS" nach, weiß jetzt nicht genau wie das heißt damit kannst du in die konsole schreiben. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
King-01 gesperrt

Anmeldungsdatum: 26.02.2007 Beiträge: 351
|
Verfasst am: 28.02.2007, 22:09 Titel: |
|
|
Geht das auch wenn ich einfach die Maus auserhalb der SUB initialisiere?
Das mit den Farben hat sich erübrigt. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 28.02.2007, 22:11 Titel: |
|
|
immer, wnen du die mauskoordianten willst, musst du getmouse aufrufen - die variable wird nicht autoamtisch aufgefüllt. natürlich kansnt du auch in einer do...loop schleife den getmouse-befehl aufrufen und dann diverse subs ausführen, mit Dim Shared wäre das kein problem. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
King-01 gesperrt

Anmeldungsdatum: 26.02.2007 Beiträge: 351
|
Verfasst am: 28.02.2007, 22:15 Titel: |
|
|
ok. Das geht jetzt. Aber da werden lauter Fadenkreuze "hingemalt"
Wenn ich bg_show mit in die schleife packe, wird das fadenkreuz wieder überschrieben. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 28.02.2007, 22:21 Titel: |
|
|
jetzt kommt die kunst der grafik schau mal nach befehlen wie Screencopy und screenset. mit screencopy kannst du einen bildschirm kopieren (wodruch du nicht immer wieder alles neu zeichenn musst) und mit screenset kannst du in einem background-buffer malen. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
King-01 gesperrt

Anmeldungsdatum: 26.02.2007 Beiträge: 351
|
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|