Problem bei Bewegendem Block

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Azran

Betreff: Problem bei Bewegendem Block

BeitragMi, Dez 16, 2009 21:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey leute ja als das problem liegt im vollgendem Programm teil.
BlitzBasic: [AUSKLAPPEN]
	If RectsOverlap(x,y,b,h,xg1,yg1,bg1,hg1) Then HuMe2=1
If HuMe2=1 Then
xb=xb-2
EndIf
If xb<880 And yb=680 Then HuMe2=2
If HuMe2=2 Then
yb=yb+2
EndIf
If xb<880 And yb>930 Then HuMe2=1
If HuMe2=1 Then

EndIf
If xb<740 And yb>930 Then HuMe2=3
If HuMe2=3 Then
yb=yb-2
EndIf

also zunächst das Rectoverlap braucht ihr net zu beachten das dient nur dem start so zu sagen als chackoint für die hauptfigur.
vollgendes problem is wenn er yb=yb-2 rechnet kommt er auf die höhe yb=680 ab da stopt er oder erfährt wie nen ping pong von oben nach unten. wenn man es durch ein <> ersetz fährt er einfach nachm start recht weg und wenn man das ganz weglässt fährt er am untersten punkt angekommen schräg ausm bild. so ich möchte nur erreichen das er halt weiter als die 680 "fährt" nur ich weis nicht wie ich das hinbekommen soll.
Vllt habt ihr ja ne idee oder vllt auch nen vorschlag das ganze kommplet anders zu schreiben
Ich bedanke mich schon mal im vorraus
MfG
Azran

Xeres

Moderator

BeitragMi, Dez 16, 2009 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
...du hast einen Spieler der auf einen Block trifft - und was soll da passieren? Was bedeuten deine Variablen?
Ein lauffähiges Beispiel wäre ebenso nett.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Azran

BeitragMi, Dez 16, 2009 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Xeres hat Folgendes geschrieben:
...du hast einen Spieler der auf einen Block trifft - und was soll da passieren? Was bedeuten deine Variablen?
Ein lauffähiges Beispiel wäre ebenso nett.

ja einma der hauptspiler der auf einen 1px hohen und 20px breiten block trifft das soll einfach nur der ausslöser sein damit der block anfängt sich zu bewegen. der block steht auf den positionen xb und yb die dann durch anfangen der rechnung verämndert werden das heißt der block bewegt sich und wenn die eine richtung beendet ist startet er ne neue als andere richtung.
ein lauf beispiel muss ich ebend schnell machen da das hauptprogramm etwas zu füllig ist oder halt viel unsinn drinne is.

Midimaster

BeitragMi, Dez 16, 2009 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
also hier geht es um eine figur, die sich auf dem bildschirm bewegen soll?

und an den ränder soll was passieren?

Du mußt da immer tierisch aufpassen, dass du keinen bereich vergißt. Dein Problem hört sich genau danach an. Normalerweise geht das so:

Code: [AUSKLAPPEN]

RichtungX=2
RichtungY=3
Repeat
    X=X+RichtungX
    Y=Y+RichtungY
    If x<Links or X>Rechts then
       RichtungX=-RichtungX
    endif
    If y<Oben or Y>Unten then
        RichtungY=-RichtungY
    endif
Forever


Unter HuMe3 kann man sich halt recht wenig vorstellen. Was soll es heißen?
 

Azran

BeitragMi, Dez 16, 2009 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hume is nur ne variable es soll HundMensch heißen weil im endeffekt soll es eine hund und einen Mensch später mal darstellen.

das programm beispiel habe ich hier
BlitzBasic: [AUSKLAPPEN]
;---------------Header----------------------
AppTitle "test"
Graphics 1280,1020,32,2
SetBuffer BackBuffer()
timer=CreateTimer(60)
;-----------------Global----------------------
Global x=1100
Global y=900
Global b=20
Global h=20


Global xb=1020
Global yb=680
Global bb=40
Global hb=20



Global xg1=740
Global yg1=900
Global bg1=40
Global hg1=1
;---------------Schleifenanfang-------------

Repeat
;------------blöcke-----------------------
Rect x,y,b,h,0
Rect xa,ya,ba,ha,0
Rect xb,yb,bb,hb,0

Rect xg1,yg1,bg1,hg1,0


;-------------strg---------------------------
If KeyDown(200) Then
y=y-1
EndIf

If KeyDown(203) Then
x=x-1
EndIf

If KeyDown(205) Then
x=x+1
EndIf

If KeyDown(208) Then
y=y+1
EndIf
;---------------bewegenderblock-----------------
If RectsOverlap(x,y,b,h,xg1,yg1,bg1,hg1) Then HuMe2=1
If HuMe2=1 Then
xb=xb-2
EndIf
If xb<880 And yb=680 Then HuMe2=2
If HuMe2=2 Then
yb=yb+2
EndIf
If xb<880 And yb>930 Then HuMe2=1
If HuMe2=1 Then

EndIf
If xb<740 And yb>930 Then HuMe2=3
If HuMe2=3 Then
yb=yb-2
EndIf
;--------------Schleifenende--------------------
Flip 0
Cls
WaitTimer timer
Until KeyHit(1)


wenn du jetz mit den von tastatur bewegenden block den strich triffst startet der andere block. so nur das problem er soll ja laut rechnung unenedlich nach oben wieter laufen zum schluss oder halt wenn man noch darunter schreibt das er zb bei 500 aufhöhren soll nur das problem bei 680 geht er wieder nach unten.

Xeres

Moderator

BeitragMi, Dez 16, 2009 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
In dem Fall sind die Abfrage-Blöcke schon mal nicht eindeutig; Hier erstmal etwas ordentlicher:
BlitzBasic: [AUSKLAPPEN]
If RectsOverlap(x,y,b,h,xg1,yg1,bg1,hg1) Then HuMe2=1
Select HuMe2
Case 1
xb=xb-2
If xb<880 And yb>680 Then HuMe2=2
Case 2
yb=yb+2
If xb<880 And yb>930 Then HuMe2=3
Case 3
yb=yb-2
If xb<740 And yb>930 Then HuMe2=4
Case 4
Text(10,20, "End Position Erreicht")
End Select


Edit:
HuMe -> HuMe2 ---Erinnert uns daran, Variablen zu deklarieren...
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
  • Zuletzt bearbeitet von Xeres am Mi, Dez 16, 2009 21:46, insgesamt einmal bearbeitet
 

Azran

BeitragMi, Dez 16, 2009 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
hm irgendwie kann ich mich irren aber irgendwie auch net der andere block der sich dann von alleine bewegen soll macht garnichts hm

Xeres

Moderator

BeitragMi, Dez 16, 2009 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, ohne Kryptische Variablen - oder wenigstens mit einer IDE die deklarierte Variablen Farbig darstellt - wäre es viel, viel einfacher Wink
So geht's...
BlitzBasic: [AUSKLAPPEN]
	If RectsOverlap(x,y,b,h,xg1,yg1,bg1,hg1) Then HuMe2=1
Select HuMe2
Case 1
xb=xb-2
If xb<880 Then HuMe2=2
Text(10,20, "HuMe2 = 1")
Case 2
yb=yb+2
If yb>930 Then HuMe2=3
Text(10,20, "HuMe2 = 2")
Case 3
yb=yb-2
If yb<930 Then HuMe2=4
Text(10,20, "HuMe2 = 3")
Case 4
Text(10,20, "End Position Erreicht")
End Select

Lass dir Anzeigen was passiert, dann siehst du in zukunft auch, an welcher Stelle das Problem liegt.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Azran

BeitragMi, Dez 16, 2009 22:01
Antworten mit Zitat
Benutzer-Profile anzeigen
hm sehe ich das richtig das wenn ich dann unten angekommen bin ich nicht wieder nach links kann?
weil ich habe das gerade vorgeführt und dort hat er dann sofort oben nur nach rehct weiter

Xeres

Moderator

BeitragMi, Dez 16, 2009 22:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie du sehen kannst, werden nur die Koordinaten bei der Abfrage zum umschalten beachtet, die auch verändert werden (was das Problem mit =680 oder <680 löst...).
Bei der letzten Abfrage hattest du eine Bedingung, die NIE wahr werden konnte, nämlich exakt die selbe wie bei der vorletzten (yb>930) - da musst du jetzt selber alles so Einstellen, das es funktioniert wie es soll.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Azran

BeitragMi, Dez 16, 2009 22:10
Antworten mit Zitat
Benutzer-Profile anzeigen
hm oke dann versuch ich das ma cya und besten dank für die hilfe

Azran

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group