 |
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 |
00Schneider

Anmeldungsdatum: 27.07.2006 Beiträge: 7
|
Verfasst am: 31.07.2006, 19:07 Titel: return bei functions |
|
|
Moin auch
Wollte mir ne eigene Funktion schreiben, mit der ich .bmp laden kann, die der Spieler auch bewegen kann. Die Funktion ist so aufgebaut LoadImg(Pfad$,Breite%,Höhe%). Das Problem ist jetzt, daß man das Bild nur innerhalb der Funktion mit "Put" laden kann. Versucht man es außerhalb der Funktion gibt es einen Kompilierfehler. Wenn man jetzt vor die Variablen tmp_img(in der Funktion) und player(return Wert) ein print setzt kann man sehen, daß das imagehandle gleich ist, allerdings beim return wert anscheinend ein Leerzeichen an den Anfang gesetzt wird.
Die Frage ist jetzt was mache ich falsch, hab alles mögliche ausprobiert und absolut keine Ahnung wo der Fehler ist.
Hier der Code (bei player = LoadImg den Pfad vom eigenen Bild angeben und Breite/Höhe):
Code: | Screen 18,32,1
Declare Function LoadImg(file As String,wid As Integer, hei As Integer)
Function LoadImg(file$,wid,hei)
Dim tmp_img As Any Ptr
tmp_img = ImageCreate(wid,hei)
Bload file$,tmp_img
Print tmp_img 'Ausgabe bei mir: "8771656"
'Put(x,y),tmp_img '<-- Bild wird angezeigt
Return tmp_img
End Function
player = LoadImg("bild.bmp",46,44)
'player = LoadImg("wand.bmp",64,64)
Print player 'Ausgabe bei mir " 8771656"
'Put(x,y),player '<-- Kompilierfehler
Sleep |
|
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 31.07.2006, 19:42 Titel: Re: return bei functions |
|
|
00Schneider hat Folgendes geschrieben: | Code: | Declare Function LoadImg(file As String,wid As Integer, hei As Integer)
..
Function LoadImg(file$,wid,hei)
..
Return tmp_img
End Function
|
| Du deklarierst eine Function ohne Typ
Declare Function(..) As Typ ist eigentlich vorgesehen, ohne Typ wird sie Long sein..
..und dann Returnst du tmp_img(und das ist Any Ptr)..
..ob das schon der Fehler ist?
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
00Schneider

Anmeldungsdatum: 27.07.2006 Beiträge: 7
|
Verfasst am: 31.07.2006, 20:23 Titel: |
|
|
Danke für deine Tips. Das Problem scheint die Konvertierung von any ptr nach int zu sein hier mal ein Beispiel:
Code: | Screen 18
Dim a As Any Ptr
Dim a2 As Integer
a=123
Print a
Sleep
a2 = CInt(a)
Print a2
Sleep
End |
Gibt es noch eine andere Möglichkeit any ptr zu konvertieren, oder kann ich das jetzt nur per Str Trim machen? |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 31.07.2006, 21:50 Titel: |
|
|
probier mal nur int(pointer) statt cint(pointer), pointer muss man eigentlich nicht runden.. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 31.07.2006, 21:55 Titel: |
|
|
00Schneider hat Folgendes geschrieben: | Danke für deine Tips. Das Problem scheint die Konvertierung von any ptr nach int zu sein hier mal ein Beispiel:
Code: | Screen 18
Dim a As Any Ptr
Dim a2 As Integer
a=123
Print a
Sleep
a2 = CInt(a)
Print a2
Sleep
End |
Gibt es noch eine andere Möglichkeit any ptr zu konvertieren, oder kann ich das jetzt nur per Str Trim machen? | Wenn a auf a2 zeigt, dann ist @a die Adresse und *der Inhalt von a2
Probier mal ?*a
Pointer sind sehr witzig und nützlich und zeigen meistens irgendwohin..
..wenn du noch nie mit Pointern gearbeitet hast such dir mal ein Tut dafür..
..denn manchmal zeigen Pointer auch dorthin, wo man es nicht vermutet.
Solche Fehler sind schwer zu finden.
Ob functions als Ptr deklariert werden können weiß ich nicht
Meine Kenntnisse über Pointer findest du hier(ja, ytwinky ist wieder da)Mehr weiß ich auch nicht(fast)..
Schaus dir mal an..
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 31.07.2006, 22:54 Titel: |
|
|
Hi 00Schneider,
Pointer lassen sich durch die Anweisung CAST(Datentyp, Ausdruck) konvertieren, aber das ist für dein Prog von oben nicht nötig.
Da sind ein paar formelle Fehler drin, die FBC bemängelte.
Code: | Option Explicit
Declare Function LoadImg(file As String,wid As Integer, hei As Integer) As Any Ptr
Dim player As Any Ptr
Screen 18,32
Function LoadImg(file As String,wid As Integer, hei As Integer) As Any Ptr
Dim tmp_img As Any Ptr
tmp_img = ImageCreate(wid,hei)
Bload file, tmp_img
'Put(0,0),tmp_img
Return tmp_img
End Function
player = LoadImg("bild.bmp",100,100)
Put(10,10),player
Sleep
ImageDestroy player
end | So, hoffe ich, läuft es.
Gruß Volta
Das ist eine Version für Puristen: Code: | Function LoadImg(file$,wid,hei)As Any Ptr
Dim tmp_img As Any Ptr
tmp_img=ImageCreate(wid,hei)
Bload file$,tmp_img
Return tmp_img
End Function
Screen 18,32
Put(10,10),LoadImg("bild.bmp",100,100)
Sleep |  _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
00Schneider

Anmeldungsdatum: 27.07.2006 Beiträge: 7
|
Verfasst am: 01.08.2006, 12:42 Titel: |
|
|
Danke für den Code Volta funktioniert alles, hätte ich auch selbst drauf kommen können, manchmal sieht man den Wald vor lauter Bäumen nicht .
Danke für den link ytwinky werd mich bei Gelegenheit mal etwas mit pointern beschäftigen. |
|
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.
|
|