Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

return bei functions

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
00Schneider



Anmeldungsdatum: 27.07.2006
Beiträge: 7

BeitragVerfasst am: 31.07.2006, 19:07    Titel: return bei functions Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 31.07.2006, 19:42    Titel: Re: return bei functions Antworten mit Zitat

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? zwinkern
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
00Schneider



Anmeldungsdatum: 27.07.2006
Beiträge: 7

BeitragVerfasst am: 31.07.2006, 20:23    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 31.07.2006, 21:50    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 31.07.2006, 21:55    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 31.07.2006, 22:54    Titel: Antworten mit Zitat

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
grinsen
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
00Schneider



Anmeldungsdatum: 27.07.2006
Beiträge: 7

BeitragVerfasst am: 01.08.2006, 12:42    Titel: Antworten mit Zitat

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 neutral.
Danke für den link ytwinky werd mich bei Gelegenheit mal etwas mit pointern beschäftigen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz