Rect Zeichen Problem

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Yniäuq

Betreff: Rect Zeichen Problem

BeitragDo, Dez 09, 2010 13:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, ich bin neu hier und habe bereits meine ersten Programmiererfahrungen mit BlitzBasic gemacht. Jetzt mein Problem, ich möchte eine Eingaberoutine machen. Ich habe alle Buchstaben in einem Bild gespeichert und sobald ich die jeweilige Taste drücke, erscheint auch der jeweilige Buchstabe auf dem Bildschirm, aber nur für einen ganz kleinen augenblick. Sobald der Cursor das Rechteck nicht mehr berührt, verschwindet der Buchstabe wieder...wie kann ich es so schreiben, dass der Buchstabe trotzdem stehen bleibt?
Soll ich die Rechtecke besser in einem Dim Feld speichern?

Code: [AUSKLAPPEN]

For tilex=1 To anz_spieler
For tiley=1 To 3
   Rect 60*tilex,60*tiley,50,50,0   ; zeichnet so viele Rechtecke, wie es Spieler gibt in x-Position und zeichnet 3 Rechtecke nach unten
         If mx<60*tilex+50 And my<60*tiley+50 And mx>60*tilex And my>60*tiley Then 
         Text 60,70, tilex+"..."+tiley ; an welchem Rechteck befinde ich mich gerade   
         
            
         
         
            key=GetKey()
                  
             If key<> 0 Then
               If key<31 Then key=33
               If key>96 Then key=key-32 ; Kleinbuchstaben sind auch Großbustaben
               ascii=key
            EndIf
             
                        posx=tilex*60
         posy=60*tiley
         
            
            
            txt$=Chr$(ascii) ;wandeltt ascii in zeichen um
            
             zeichen = CreateImage(tln * 32,32)
            
             
            
            make_zeichen()
               DrawImage zeichen,posx,posy   

            
            
         
         EndIf

next
next         

Ana

BeitragDo, Dez 09, 2010 13:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit einem Type wäre das ganze natürlich sehr elegant, allerdings kannst du auch eine globale variable machen, wenn du nur ein Bild jeweils haben willst, jedenfalls musst du es so in deiner Main loop unterbringen, das es nicht nur für den einen Frame in dem die jeweilige Taste gedrückt wird angezeigt wird. vielleicht einfach was in richtung

Code: [AUSKLAPPEN]
if imageanzeigen = true then Drawimage ...


bin mir aber nicht sicher ob das wirklich deiner frage entspricht.

Und ja Dim Felder/Arrays bieten sich prima an um rechteckige Maps darin zu speichern, sicherlich eine gute Idee

Außerdem geht es ein wenig mit createimage drunter und drüber, ich glaube es würd jeden durchlauf ein neues erstellt, welches dann in der variable gespeichert wird, wenn nichts gedrückt wurde dann ist das halt auch leer. Die Bilder als solches geistern aber noch irgendwo in deinem speicher rum, createimage sollte eigentlich auch immer ein freeimage haben, vorallem wenn du die variable überschreiben willst
Don't only practice your art,
but force your way into its secrets,
for it and knowledge
can raise human to divine
 

Yniäuq

BeitragDo, Dez 09, 2010 13:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Dankeschön Ana Smile

Ich möchte ein Multiplayergame programmieren und jeder Spieler darf 3 Tasten belegen. Sollte ich das dann also am besten mit Types probieren?

Ana

BeitragDo, Dez 09, 2010 14:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Types sind fast immer eine gute Idee, wenn du mich fragst ich mag sie jedenfalls. Allerdings kann ich dir nicht sagen ob es in dem Fall sinnvoll ist, weil ich eigentlich kaum eine vorstellung habe was du eigentlich tust bzw. in welchem zusammenhang tastedrücken + bild malen steht. Aber angenommen du willst das bild eine sekunde anzeigen würde ich das so machen:

BlitzBasic: [AUSKLAPPEN]
Type Bild
Field image
Field time ;Zeitpunkt der erstellung
Field n.bild ;Verweis auf das nächste bild der liste
End Type

Global First_Bild.bild ; Soll eine aneinander Reihung von Types beginnen

Function Bild_erstellen.bild(image);Fügt First_bild ein weiteres objekt hinzu
b.bild = New bild
b\image = image
b\time = MilliSecs()

If First_Bild = Null Then
First_bild = b; Wenn first_bild leer ist kommt der neue in diese Variable
Else
c.bild = first_bild
While c\n <> Null
c = c\n ; Wenn first_bild schon exsitiert, dann wird sein nachfolger genommen, solange bis ein bild kein weiteres in b\n gespeichert hat und dort wird das neue hinzugefügt
Wend
c\n = b
EndIf

Return b
End Function

Const Bild_dauer = 1000 ;Gibt die Zeit an die Bilder bestehen sollen

Function Bild_aktuallisieren()

If first_bild\time + bild_dauer < MilliSecs() Then ;wenn das bild älter ist als 1000 milisekunden
b.bild = first_bild
first_bild = first_bild\n ; gibs ein neues first_bild
Delete b; und das alte wird gelöscht
EndIf
; Falls das erste in der Liste seine Lebenszeit überdauert hat, wird es gelöscht und der 2te tritt an seine stelle

End Function

Function Bild_zeichnen(x,y)
For b.bild = Each bild
DrawImage b\image,x,y
x = ImageWidth(b\image) * 1.2 ; Sorgt dafür das die bilder nebeneinander gemalt werden
Next
End Function


So glaube ich müsste das einigermaßen passen eventuell kannst du da ja was nützliches für dich draus sehen, ansonsten hab ich einfach nur eine angenehme ablenkung während einer langweiligen vorlesung gehabt Very Happy

Achso kann sein dass das nicht ganz passt, kann das leider hier nicht testen ... olles linux ...

Edit: Ich weiß ja nicht wie weit deine kenntnisse reichen und will dir bestimmt nicht zu nahe tretten, wenn du irgendwas nicht verstehen solltest, kannst mir auch gern eine PM schreiben, ich freu mich immer über Post Wink
Don't only practice your art,
but force your way into its secrets,
for it and knowledge
can raise human to divine

Tankbuster

BeitragDo, Dez 09, 2010 21:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Yniäuq hat Folgendes geschrieben:
Dankeschön Ana Smile

Ich möchte ein Multiplayergame programmieren und jeder Spieler darf 3 Tasten belegen. Sollte ich das dann also am besten mit Types probieren?


Was für ein Spiel soll es eigentlich werden?
Types sind eigentlich nie verkehrt, vorallem weil sie viel dynamischer sind als Dim-Arrays. Später kannst du auf einfachstem weg, ohne viel rumgeändere deinem Programm noch Sachen hinzufügn. Bei Dim-Arrays ist das etwas schwieriger, obwohl man sie im Prinzip auch wie Types mit Konstanter Anzahl verwalten könnte.

Ein Type Beispiel:
(ich weiß ja nicht, ob du mit Types schon zurrecht kommst, da du recht neu bist. Der Code sollte selbstklärend sein Smile )

Code: [AUSKLAPPEN]
Graphics 800,600
SetBuffer BackBuffer()

Type Schneeflocke
Field x,y ;zwei Type-Variablen hintereinander geschrieben, anstatt untereinander. Platzsparend :P
Field speed
End Type

Global S.Schneeflocke ;Type als "Global" definieren, damit es in Funktionen verwendet werden kann. Solange man die
                 ;die erste Schneeflocke in einer Funktion erstellt, ist der Type automatisch Global.



For i=1 To 1000
create_Schneeflocke(Rnd(800),Rnd(-600),Rnd(1,3))
Next

Timer=CreateTimer(60)
While KeyDown(1)=0
Cls

update_Schneeflocke()

WaitTimer(Timer)
Flip 0
Wend



Function create_Schneeflocke(L_x,L_y,L_speed) ;Schneeflocke erstellen
   S.Schneeflocke=New Schneeflocke
   S\x=L_x
   S\y=L_y
   S\speed=L_speed
End Function

Function update_Schneeflocke()
   For S.Schneeflocke=Each Schneeflocke
   
      S\x=S\x+Rnd(-1,1)
      S\y=S\y+S\speed
      
      If S\y>600 Then S\y=0:S\x=Rnd(800)
      
      Rect S\x,S\y,1,1
   Next
End Function
Twitter
Download Jewel Snake!
Windows|Android

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group