Linie soll sich von alleine bewegen

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

sycron

Betreff: Linie soll sich von alleine bewegen

BeitragMi, Nov 25, 2009 14:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich bin neu hier und wir machen gerade Blitzbasic in Informatik. Meine Frage ist nun wie man eine Linie mit einem Image von alleine größer werden lassen kann. Immom wird sie länger wenn man die pfeiltasten benutzt, aber durch die Pfeiltasten sollen sich nur die Richtung ändern
hoffe ihr versteht mein Problem.

mfg Martin

BladeRunner

Moderator

BeitragMi, Nov 25, 2009 14:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Poste doch mal deinen Code und beschreib etwas ausführlicher was nicht geht wie du es willst.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

sycron

BeitragMi, Nov 25, 2009 14:07
Antworten mit Zitat
Benutzer-Profile anzeigen
also, ich hab eine Image (ein rechteck bei paint gezeichnet) das sich immom durch die pfeiltasten bewegen lässt. Dabei wird es nicht durch "cls" gelöscht wodurch ja eine Linie entsteht. Aber ich will das die Linie von alleine wächst ohne das man die ganze Zeit die Pfeiltasten gedrückt halten muss und dass sich die richtung in der die linie wächst sich durch die pfeiltasten ändert.

mfg

Jan_

Ehemaliger Admin

BeitragMi, Nov 25, 2009 14:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, so wie bei Snake?
between angels and insects

DerHase

BeitragMi, Nov 25, 2009 14:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann solltest Du mit den Pfeiltasten eine Richtungs variable ändern. Und diese dann mit einem Select Case abfragen. Je nach Fall addierst Du bzw. subtrahierst Du entweder von der x oder y Position.
Play Satyr!

BladeRunner

Moderator

BeitragMi, Nov 25, 2009 14:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Poste doch einfach mal Deinen Code damit wir uns ein Bild davon machen können.
Benutz dafür die [code]- tags oben über dem Eingabefeld.

Schon vorneweg: es ist mehr als ungünstig auf ein Buffering zu verzichten, sprich immer nur auf ein Bild draufzuzeichnen.
Eine sinnvolle Lösung könnte zb. sein sich die Mauskoordinaten zu merken..
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

sycron

BeitragMi, Nov 25, 2009 14:15
Antworten mit Zitat
Benutzer-Profile anzeigen
hm ich will ja nichts sgaen aber könnt ihr das mal für dumme leute schreiben ich versteh kein wort^^
und ja so wie bei snake...
mfg
Code: [AUSKLAPPEN]



b=MilliSecs()



Graphics 1000,1000;
Unbenannt=LoadImage("unbenannt.bmp")
Unbenannt1=LoadImage("unbenannt1.bmp")
hintergrund=LoadImage("hintergrund.bmp")
HintergrundIII=LoadImage("HintergrundIII.bmp")
HintergrundII=LoadImage("HintergrundII.bmp")


x=500
y=500





blubb=PlayMusic("download.mp3")

Print"Drücke Leertaste zum starten";
WaitKey;
Cls;

SeedRnd MilliSecs()
e=Rnd(1,3)

If e=1
DrawImage hintergrund,1,1
EndIf


If e=2
DrawImage HintergrundIII,1,1
EndIf


If e=3
DrawImage HintergrundII,1,1
EndIf

c=MilliSecs;
d=b-c




SetBuffer BackBuffer()


While Not KeyHit(1);



If KeyDown(205) 
x=x+5
End If

 If KeyDown(203)
   x=x-5
 EndIf

If KeyDown(208)
y=y+5
EndIf

If KeyDown(200)
y=y-5
EndIf

SeedRnd MilliSecs()
a=Rnd(1,40)
If a=10
Color 1000,0,0
EndIf

If x>988 Then x=988
If x<0 Then x=0
If y>730 Then y=730
If y<0 Then y=0


SeedRnd MilliSecs()
a=Rnd(1,40)
If a=10
Color 1000,0,0
EndIf

If a=9
Color 0,1000,0
EndIf

If a=8
Color 0,0,1000
EndIf

If a=7
Color 1000,1000,0
EndIf


DrawImage Unbenannt,x,y


Flip
wend


BladeRunner

Moderator

BeitragMi, Nov 25, 2009 14:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Also:
- rück deinen Code ein, dann ist er besser zu lesen.
Code: [AUSKLAPPEN]
for i = 1 to 10
print bla
blub()
next

Code: [AUSKLAPPEN]
for i = 1 to 10
    print bla
    blub()
next

Der Unterschied sollte Klar sein. Zusammenhängende Blöcke haben die gleiche Einrückung.

- Color geht je von 0-255. 1000 ist weit über die Grenze.
- Das Koordinatensystem für Bilder beginnt bei 0,0 - nicht bei 1,1
- Benutz längere, aussagekräftige Variablennamen. "b" sagt mir nichts über den Sinn der Variable.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

sycron

BeitragMi, Nov 25, 2009 14:27
Antworten mit Zitat
Benutzer-Profile anzeigen
ich sollte dazu sagen das ich auch ein Anfänger in Blitzbasic bin und erstmal zufrieden bin wenns läuft^^(mir ist schon klar das man das alles besser ordnen kann)
helft mir mal bitte und gebt mir mal ein Beispiel für einen Code wie das läuft vielen Dank
mfg Martin
 

da_poller

BeitragMi, Nov 25, 2009 14:46
Antworten mit Zitat
Benutzer-Profile anzeigen
https://www.blitzforum.de/foru...php?t=6114

hier findest du infos etc..


Zitat:
ich sollte dazu sagen das ich auch ein Anfänger in Blitzbasic bin und erstmal zufrieden bin wenns läuft^^(mir ist schon klar das man das alles besser ordnen kann)


lerns gleich richtig dann haste mehr davon.
 

sycron

BeitragMi, Nov 25, 2009 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
soll ich da jetzt mein problem nochmal posten ich will doch einfach nur hilfe nen code den ich als basis verwenden kann.... Sad
 

da_poller

BeitragMi, Nov 25, 2009 14:52
Antworten mit Zitat
Benutzer-Profile anzeigen
du sollst ihn da nicht nochmal posten.
du sollst die dort angebotenen hilfen lesen verstehen und anwenden.

wenn dir jetzt jeman den code richtig bastelt läuft er zwar aber du hast NULL komma NIX gelernt.
 

sycron

BeitragMi, Nov 25, 2009 14:53
Antworten mit Zitat
Benutzer-Profile anzeigen
danke schatz Embarassed

TimBo

BeitragMi, Nov 25, 2009 15:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Sycron ,

male Anstatt auf den Buffer den du nichts clearst, lieber auf eine Bilddatei.

oben halt
CreateImage

und in der Mainloop
SetBuffer Imagebuffer
hier kannst du dann malen was du willst
Setbuffer Backbuffer
DrawImage

und hier muss jetzt
flipcls
folgen.

Grüße
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.
 

DrFugazi

BeitragMi, Nov 25, 2009 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich verstehe viele Zusammenhänge auch besser, wenn ich einen funktionierenden Code vor mir habe.

Schau mal das kleine Beispiel an, so funktioniert es:

Code: [AUSKLAPPEN]

;Timer mit 60 Hz (also 60mal pro sek) festlegen, kannst aber auch einen anderen Wert einsetzen
Global timer# = CreateTimer(60)    

;Anzahl der Schleifendurchläufe festlegen
AnzahlDurchlaeufe = 500            

;Hauptschleife wiederholen solange KeyHit(1) also Esc gedrückt wird danach Programm beenden       
While Not KeyHit(1)   

;die Schleife wo die Rechtecke gezeichnet werden         
For i = 1 To AnzahlDurchlaeufe   

;Verzögerung durch Timer erzeugen damit man das Zeichnen an sich auch sieht,
;wenn du die Zeile weg lässt, dann erscheint die Linie einfach scheinbar in einem Schritt
       WaitTimer(timer#)         
       
;Rechteck zeichnen, i wird als x-Wert des Rechtecks genutzt und wird pro Durchlauf um 1 erhöht           
   Rect(i, 235, 5, 5)         

;Schleifenende
Next   

;Hauptschleifenende                  
Wend                  
End

M0rgenstern

BeitragMi, Nov 25, 2009 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, DrFugazi hat Recht mit seinem Code. Und wenn du willst, dass deine Linie länger wird, dann erhöhst du einfach den vorletzten Wert dementsprechend.
Problematisch wenns dann nur "wie bei Snake" sein soll, dann geht das ganze nicht mehr so einfach (um Ecken bewegen).


@ DrFugazi, was mir bei deinem Code noch aufgefallen ist:
Zitat:
;Hauptschleife wiederholen solange KeyHit(1) also Esc gedrückt wird danach Programm beenden


Sollte wohl eher:
Zitat:
;Hauptschleife wiederholen bis KeyHit(1) also Esc gedrückt wird danach Programm beenden


heißen.
Sorry, ist mir nur aufgefallen.

Lg, M0rgenstern
 

sycron

BeitragMi, Nov 25, 2009 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
dankeschön, sowas wollte ich haben:-), mal sehen obs mir jetzt weiterhilft

TimBo

BeitragMi, Nov 25, 2009 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
warum malst du die Linie immer komlpett durch , wenn du den Buffer eh nicht clearst ?

Der Code ist nicht schön.

BlitzBasic: [AUSKLAPPEN]

Graphics 1024,768,32,2
SetBuffer BackBuffer()
Local timer=CreateTimer(60)

Local Image=CreateImage(1024,768)
Local x,y

Const hoch=0
Const runter=1
Const links=2
Const rechts=3
Local status=runter

Repeat
Select status
Case hoch
y=y-1
Case runter
y=y+1
Case links
x=x-1
Case rechts
x=x+1
End Select

If KeyHit(208) Then status=runter
If KeyHit(200) Then status=hoch
If KeyHit(203) Then status=links
If KeyHit(205) Then status=rechts


SetBuffer ImageBuffer(Image)
Plot(x,y)
SetBuffer BackBuffer()
DrawImage Image,0,0



WaitTimer(timer)
Flip(0):Cls
Until KeyHit(1)


Grüße
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.
 

DrFugazi

BeitragMi, Nov 25, 2009 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Mein Code ist auch nicht schön, aber ein Lösungsansatz für das Problem.

Ich wollte Sycron nur die ungefähre Richtung zeigen.

Sieh' es einfach als "Skizze"

@M0rgenstern: Du hast natürlich recht Smile

TimBo

BeitragMi, Nov 25, 2009 16:14
Antworten mit Zitat
Benutzer-Profile anzeigen
DrFugazi,
war ja nicht persönlich gemeint.
als skizze ist dein code sogar sehr gut geeignet ;D


Greez
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group