Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
nano91
Anmeldungsdatum: 11.01.2007 Beiträge: 19
|
Verfasst am: 28.03.2007, 16:36 Titel: objekt automatisch bewegen |
|
|
hallo
entweder wurde diese frage noch nicht gestellt,
oder ich habe in der suchfunktion die falschen begriffe eingegeben.
also:
ich möchte ein object (bspw. einen kreis)
automatisch über den bildschirm laufen lasse.
er soll von einer seite zur anderen
und dann apprallen und in eine andere richtung.
ausserdem soll er noch die farbe wechseln
ich weiss aber nicht wie das gehen soll.
mir fehlen unter anderem die befehle,
die sleep ersetzen, da sleep min. 1 sek machen kann
und der kreis sich ja schneller bewegen muss.
was ich bis jetzt hab ist:
Code: |
x!= 30
y!= 40
r = 20 'radius
c=1 'farbe(color)
w=1 'x+w
z=1.5 'y+z
v=1 'c+v
[...]
screen 12
[...]
x!=x!+w
y!=y!+z
c=c+v
[...]
if x! >= 640 then w = -w
if y! >= 480 then z = -z
if c = 15 then v = -v
if inkey$ = chr$(27) then end
|
oder so ähnlich "
also ich weiss nicht, wie man den kreis malen soll und wo dann das circle(x!,y!),r,c hinkommen soll. |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 28.03.2007, 16:55 Titel: |
|
|
das ist nur ein kleines und einfaches beispiel das ich vor ein paar Tagen schon mal für jemanden gemacht habe zur groben erklärung....
vielleicht hilft es Dir...
Code: |
randomize timer
screen 18
ballx=int(rnd*620)+20
bally=int(rnd*460)+20
radius=20
do
destx=int(rnd*3)-1
desty=int(rnd*3)-1
loop while destx<>0 and desty<>0
while inkey$<>chr$(27)
ballx+=destx*2
bally+=desty*2
if ballx<20 Then
ballx=20
destx=int(rnd*3)-1 : desty=int(rnd*3)-1
end if
if ballx>618 Then
ballx=618
destx=int(rnd*3)-1 : desty=int(rnd*3)-1
end if
if bally<20 Then
bally=20
destx=int(rnd*3)-1 : desty=int(rnd*3)-1
end if
if bally>458 Then
bally=458
destx=int(rnd*3)-1 : desty=int(rnd*3)-1
end if
If destx=0 and desty=0 then
do
destx=int(rnd*3)-1
desty=int(rnd*3)-1
loop while destx<>0 and desty<>0
end if
screenlock
cls
circle(ballx,bally),radius,15
paint (ballx,bally),15,15
screenunlock
wend
|
_________________
 |
|
Nach oben |
|
 |
nano91
Anmeldungsdatum: 11.01.2007 Beiträge: 19
|
Verfasst am: 28.03.2007, 17:02 Titel: |
|
|
1. klappt das irgendwie nicht
2. ich kapier davon nicht viel. (bin en totaler noob)
folgende begriffe sagen mir nix:
Code: |
randomize timer
int(rnd*620)+20
destx=int(rnd*3)-1
screenunlock
wend
screenlock
If destx=0 and desty=0 then
do
destx=int(rnd*3)-1
desty=int(rnd*3)-1
loop while destx<>0 and desty<>0
end if
|
|
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 28.03.2007, 21:19 Titel: |
|
|
@eternal pain:
das wird ihm so erst´ma wenig nutzen.
klappen KANN es gar nicht, weil es ein fb source ist. qb kennt ja den screen 18 net, screenlock, screenunlock, all das kennt qb ja gar net. _________________ If hilfreicher_Beitrag then klick(location.here)
Klick |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 29.03.2007, 00:52 Titel: |
|
|
Das haben meine müden Augen vorhin doch glautt übersehen ?! _________________
 |
|
Nach oben |
|
 |
nano91
Anmeldungsdatum: 11.01.2007 Beiträge: 19
|
Verfasst am: 29.03.2007, 19:56 Titel: |
|
|
ja toll...
und wie geht das jetzt??? |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 29.03.2007, 20:38 Titel: |
|
|
funzen tut es so, aber.... es ist unansähnlich.
Code: |
dim ballx as integer
dim bally as integer
dim radius as integer
dim destx as integer
dim desty as integer
randomize timer
screen 12
ballx=int(rnd*620)+20
bally=int(rnd*460)+20
radius=20
do
destx=int(rnd*3)-1
desty=int(rnd*3)-1
loop while destx<>0 and desty<>0
while inkey$<>chr$(27)
ballx+=destx*2
bally+=desty*2
if ballx<20 Then
ballx=20
destx=int(rnd*3)-1 : desty=int(rnd*3)-1
end if
if ballx>618 Then
ballx=618
destx=int(rnd*3)-1 : desty=int(rnd*3)-1
end if
if bally<20 Then
bally=20
destx=int(rnd*3)-1 : desty=int(rnd*3)-1
end if
if bally>458 Then
bally=458
destx=int(rnd*3)-1 : desty=int(rnd*3)-1
end if
If destx=0 and desty=0 then
do
destx=int(rnd*3)-1
desty=int(rnd*3)-1
loop while destx<>0 and desty<>0
end if
cls
circle(ballx,bally),radius,15
paint (ballx,bally),15,15
wend
|
_________________ If hilfreicher_Beitrag then klick(location.here)
Klick |
|
Nach oben |
|
 |
nano91
Anmeldungsdatum: 11.01.2007 Beiträge: 19
|
Verfasst am: 29.03.2007, 22:49 Titel: |
|
|
bei mir gehts nicht
da kommt immer der fehler bei
"erwarted: ausdruck" |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 29.03.2007, 22:54 Titel: |
|
|
Das ist eine übernahme von C glaub ich...
ersete es einfach durch
Code: | ballx=ballx+(destx*2) |
dann müsste es gehen... bei alles anderen dann natürlich auch in der Form ändern... _________________
 |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 29.03.2007, 22:55 Titel: |
|
|
Hast du schon mal Code: | ballx=ballx+destx*2 | probiert?
Kannst dich ja melden, wenn es bei bally ähnliche Probleme gibt
@Eternal_pain:
Der externe extra-terrestrische war schneller.. Code: | If QBASIC kann kein += Then
@csderats:
Wenn du Code postest, muß er auch zur Programmiersprache passen..
End If |
_________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO..
Zuletzt bearbeitet von ytwinky am 29.03.2007, 23:01, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 29.03.2007, 23:00 Titel: |
|
|
Hallo
Zu der Sache mit den Pausen, die kürzer sind als die 1 Sekunde mit SLEEP. Das einfachste ist wohl, einfach eine leere Programmschleife so oft laufen zu lassen, dass der Rechner eben solange beschäftigt ist, wie du die Pause haben möchtest. Der Nachteil dabei ist, das diese Schleife auf unterschidlich schnellen Rechnern eben auch unterschiedlich lange Pausen ergibt.
Eine andere Möglichkeit ist, mit dem Befehl TIMER zu arbeiten. Unter diesem Suchbegriff findest du hier im Forum bestimmt massig Einträge. Kurz gesagt kannst du damit die Uhr abfragen. Als Ergebnis von
bekommst du die Sekunden, die seit Mitternacht vergangen sind. Diese Uhr läuft in Schritten von ca. 0,054 Sekunden. Du speicherst z.B. im Programm die Startzeit einer Pause und lässt dann eine DO...LOOP-Schleife oder so laufen in der du jedesmal die aktuelle Zeit mit der gespeicherten Startzeit vergleichst. Wenn die Differenz grösser ist, als die Pausenzeit, dann wird die Schleife verlassen und der neue Kreis gezeichnet.
Gruß
skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 29.03.2007, 23:03 Titel: |
|
|
Wieso schreibt eigentlich jeder das mit Timer die sekunden seit mitternacht zurückgegeben werden ? Ich meine mal gelesen zu haben das Timer die Sekunden nach Systemstart zurück gibt? Wodurch es selten zu einer wiederholten Timer rückgabe kommt, was bei Randomize zB zum Vorteil kommt.... Hat sich da irgendwas dran geändert ?! Ist mir das entgangen ? _________________
 |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 29.03.2007, 23:08 Titel: |
|
|
Eternal_pain hat Folgendes geschrieben: | Wieso schreibt eigentlich jeder das mit Timer die sekunden seit mitternacht zurückgegeben werden ? |
Weil es so ist. Teste es, und du wirst sehen, das TIMER die Sekunden seit Mitternacht zurückgibt. Probieren geht über studieren.
EDIT: Kleines Beispielprogramm:
Code: | DO
sek = TIMER
std = FIX(sek / 3600)
sek = sek - std * 3600
min = FIX(sek / 60)
sek = FIX(sek - min * 60)
IF sekalt <> sek THEN
CLS
PRINT "Es ist"; std; "Uhr"; min; "Minuten und"; sek; "Sekunden"
sekalt = sek
END IF
LOOP WHILE INKEY$ = ""
|
Gruß
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 29.03.2007, 23:31 Titel: |
|
|
Skilltronic hat Folgendes geschrieben: | Weil es so ist. Teste es, und du wirst sehen, das TIMER die Sekunden seit Mitternacht zurückgibt. Probieren geht über studieren. | ..genau und es kann überhaupt nix kaputtgehen
Anders ist es bei FreeBASIC, das gibt die Zeit seit SystemStart zurück..
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 |
|
 |
nano91
Anmeldungsdatum: 11.01.2007 Beiträge: 19
|
Verfasst am: 29.03.2007, 23:36 Titel: |
|
|
kann mir jemand das hier erklären??
Code: |
5 CLS
10 SCREEN 9
20 CLS
30 FOR fuellstand = 0 TO 1 STEP .01
40 LINE (100, 100)-(200, 300), 15, B
50 LINE (101, 100)-(199, 299 - fuellstand! * 180), 0, BF
60 LINE (101, 299 - fuellstand! * 180)-(199, 299), 14, BF
70 zeit = TIMER: DO: LOOP WHILE TIMER < zeit + .1
80 NEXT
90 SLEEP
|
(die zahlen zum besseren erklären)
also ich kapier die zeilen 30, 50 und 60 nicht. |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 29.03.2007, 23:44 Titel: |
|
|
Was genau davon verstehst du denn nicht? Da wird ein leeres, weisses Reechteck gezeichnet und das dann in Sekundenabständen nach und nach in Schritten von einem Zehntel der Gesamthöhe mit einem gelben Rechteck aufgefüllt. _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 29.03.2007, 23:45 Titel: |
|
|
da war ein kleiner fehler....
Code: |
dim zeit as double
SCREEN 9
FOR fuellstand! = 0 TO 1 STEP .01
LINE (100, 100)-(200, 300), 15, B
LINE (101, 100)-(199, 299 - fuellstand! * 180), 0, BF
LINE (101, 299 - fuellstand! * 180)-(199, 299), 14, BF
zeit = TIMER: DO: LOOP WHILE TIMER < zeit + .1
NEXT
SLEEP
|
wenn man es sich ansieht, erklärt es sich eigentlich von selbst... _________________
 |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 29.03.2007, 23:49 Titel: |
|
|
Code: | 'Option Explicit 'Ooops, das ist ja gar kein FreeBASIC..
Dim Fuellstand As Single, Zeit As Double | ..und nun deine nächste Frage bitte.. _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
nano91
Anmeldungsdatum: 11.01.2007 Beiträge: 19
|
Verfasst am: 30.03.2007, 16:00 Titel: |
|
|
Skilltronic hat Folgendes geschrieben: | Was genau davon verstehst du denn nicht? Da wird ein leeres, weisses Reechteck gezeichnet und das dann in Sekundenabständen nach und nach in Schritten von einem Zehntel der Gesamthöhe mit einem gelben Rechteck aufgefüllt. |
also ich weiss so ungefähr was FOR, STEP und NEXT machen,
aber ebend nicht genau.
und ich würde gerne wissen warum in den zeilen 50 & 60 immer irgendwo (,299 - fuellstand * 180) steht.
was bewirkt das? |
|
Nach oben |
|
 |
|