Bewegung von Rechtecken - Ponspiel

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Hansy

Betreff: Bewegung von Rechtecken - Ponspiel

BeitragSo, Dez 17, 2006 14:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

da ich noch ein kleiner noob in Sachen programieren bin, hätte ich eine kleine Frage:

Ich habe ein Rechteck erstellt ( RECT ) und habe dieses ausgeschnitten und an die Maus gepackt. Nun habe ich das so gemacht, dass es auf der einen Seite von oben nach unten geht und auf der anderen Parallel dazu. Jedoch möchte ich jetzt, dass eines der Rechtecke, also meine Kellen für mein Pongspiel, genau anders rum geht als das andere. Damit meine ich wenn ich die eine Seite nach oben schiebe soll die andere nach unten gehn usw.

PS: Ich hoffe ihr könnt mir helfen Smile

mfg
Hansy
 

Problemchen

BeitragSo, Dez 17, 2006 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, ich denke du meinst sowas:

Code: [AUSKLAPPEN]
...
kelle1_ypos=mousey()
kelle2_ypos=maxy - mousey()
...

An die eine Kelle übergibst du den originalen Wert zum raufschieben und bei der anderen ziehst du den Wert vom Maximalwert ab, damit bewegt sie sich gegengleich.

gl

BladeRunner

Moderator

BeitragSo, Dez 17, 2006 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Du weisst ja zu jeder Zeit wlche Koordinaten deine eine 'Kelle' hat. Für die andere musst du nur die Koordinaten der ersten von dem unteren Ende des Spielfeldes abziehen damit sie andersrum läuft.

Beispiel:
Auflösung 640 * 400, ganzer Bildschirm ist Spielfeld
Jede Kelle ist 50 Pixel hoch.
Kelle 1: y = 20
dann ist kelle 2:
400 - 50 - 20 = 330.
(höhe des Bildschirms - Höhe der Kelle - y-Position)
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
 

Hansy

BeitragSo, Dez 17, 2006 15:13
Antworten mit Zitat
Benutzer-Profile anzeigen
So jetzt kapier ich das aber immer noch nicht ganz Smile Und die eine Kelle seh ich plötzlich gar nicht mehr Sad


Code: [AUSKLAPPEN]

Graphics 800,600,32,2

Rect 2,2,20,100

Kelle1 = CreateImage(20,100)
GrabImage Kelle1,2,2

;Kelle1 = CreateImage(20,100)
;GrabImage Kelle1,2,2

Cls
ClsColor 0,0,0

Repeat
   Cls
   GetMouse ()
   X=MouseX()
   Y=MouseY()
   DrawImage Kelle1, 2, y
   DrawImage Kelle1, 778, y
   
Until MouseHit(2)

BladeRunner

Moderator

BeitragSo, Dez 17, 2006 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Du ziehst ja auch das y nicht vom maximum ab. und positionierst die 2e kelle ausserhalb des Bildes.
Code: [AUSKLAPPEN]
Graphics 800,600,32,2
setbuffer backbuffer() ;doublebuffering !
Rect 2,2,20,100

Kelle1 = CreateImage(20,100)
GrabImage Kelle1,2,2

;Kelle1 = CreateImage(20,100)
;GrabImage Kelle1,2,2

Cls
ClsColor 0,0,0

Repeat
   Cls
   ;GetMouse () -unnötig, du ignorierst den Rückgabewert.
   X=MouseX()
   Y=MouseY()
   DrawImage Kelle1, 2, y
   DrawImage Kelle1, 780,600-100- y
   flip
Until MouseHit(2)
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
 

Hansy

BeitragSo, Dez 17, 2006 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso Embarassed Jetzt weiß ich was du meintest Smile

Ok wenn ich schon beim fragen bin:

Jetzt möchte ich einen Ball von Links nach Rechts wandern lassen und wenn der Ball an der Rechten Ecke angekommen ist soll der wieder zurück nach Links wandern und das solange bis ich nicht die rechte Maustaste gedrückt habe.

Soweit so gut, nur wenn der Ball an der Rechten Ecke geht der nicht wieder zurück , da x=x+1 und x=x-1 zum Stillstadn führen. Wenn ich da jetzt bei x=x-1 eine größere Zahl nehme wandert der ball aber wieder zurück!

Code: [AUSKLAPPEN]

Graphics 800,600,32,2
SetBuffer BackBuffer()

Oval 20,20,20,20

Ball = CreateImage(20,20)
GrabImage Ball,20,20


Cls
ClsColor 0,0,0

Repeat
   Cls
   x=x+1
   DrawImage Ball,x,y
   If x=780 Then x=x-1
   Flip
Until MouseHit(2)
[/code][/quote]
 

Matthias

BeitragSo, Dez 17, 2006 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hay Hansy. Habe dir mal ein Beispiel gemacht. An dem Kannst du ein wenig üben. Nehme es auseinander und versuche es zu verstehen.



Code: [AUSKLAPPEN]

FensX=800:FensY=600

Graphics FensX,FensY,32,2

SchlAX=60:SchlBX=FensX-60:;"Schläger Positionen"


;"------------------Erstelle Ball und Schläger---------------"
Ball=CreateImage(30,30):SetBuffer ImageBuffer(Ball)
Color 255,255,0:Oval 0,0,30,30
SchlA=CreateImage(20,60):SetBuffer ImageBuffer(SchlA):ClsColor 255,0,0:Cls
SchlB=CreateImage(20,60):SetBuffer ImageBuffer(SchlB):ClsColor 0,0,255:Cls
MidHandle Ball:MidHandle SchlA:MidHandle SchlB
ClsColor 0,200,0:SetBuffer BackBuffer()

;------FensterMittelpunkt--------"
BallX#=FensX/2:BallY#=FensY/2






Repeat:Cls
If MouseHit(1) Then BallMoveX#=Rand(-5,5):BallMoveY#=Rand(-5,5);"Start 
MY=MouseY()

;"----------BallBewegen------------"
BallX#=BallX#+BallMoveX#
BallY#=BallY#+BallMoveY#

;"Collision mit Fensterrand"
If BallX#<15 Or BallX#>FensX-15 Then BallMoveX#=BallMoveX#*-1
If BallY#<15 Or BallY#>FensY-15 Then BallMoveY#=BallMoveY#*-1
;"Collision mit SchlägerA Player"
If ImagesCollide(SchlA,SchlAX,MY,0,Ball,BallX#,BallY#,0)=1 Then
BallMoveX#=BallMoveX#*-1:BallMoveY#=BallMoveY#*-1:End If

;"Collision mit SchlägerB PC"
If ImagesCollide(SchlB,SchlBX,BallY,0,Ball,BallX#,BallY#,0)=1 Then
BallMoveX#=BallMoveX#*-1:BallMoveY#=BallMoveY#*-1:End If


;"Alles Anzeigen
DrawImage Ball,BallX#,BallY#
DrawImage SchlA,SchlAX,MY
DrawImage SchlB,SchlBX,BallY#


Flip
Until KeyDown(1)=1:End


Tipp: Beschäftige dich ersteinmal mit die Tutorials die es für BlitzBasic gibt.
http://www.robsite.de/tutorials.php?tut=blitzbasic

Hagbard

BeitragSo, Dez 17, 2006 16:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, programmiere eine Bedingung die die Position abfragt und jenachdem festlegt, in welche Richtung der Ball fliegt.

Wenn du von einem Pong redest, meinst du aber bestimmt, dass der Ball im Feld rumfliegt und an den Wänden abprallt oder?

Keine besonders elegante, aber funktionierende Lösung, mit der du ein wenig arbeiten kannst.

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

Oval 20,20,20,20

Ball = CreateImage(20,20)
GrabImage Ball,20,20


Cls
ClsColor 0,0,0

Repeat
   Cls
   DrawImage Ball,x,y
   If x > 780 Then
     s=-1
   ElseIf x < 10 Then
   s = +1
   EndIf

   x= x + s   
   Flip
Until MouseHit(2)
 

Hansy

BeitragSo, Dez 17, 2006 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich danke euch!

Ich melde mich dann wenn ich wieder ein Prob habe Wink
 

Hansy

BeitragDi, Dez 19, 2006 22:01
Antworten mit Zitat
Benutzer-Profile anzeigen
So nun ist mein Proggi schon "recht" gut Smile (Für mich zumindest). Jedoch weiß ich jetzt nicht genau wie ich das mit der Kolision von dem Oval mit dem Rechteck abfragen soll. Ich habe mich versucht zu erkundigen und bin dann auf folgenden Befehl gekommen:

Zitat:

If ImageRectCollide(bild,x,y,frame,rechteck_x,rechteck_y,rechteck_breite,rechteck_hoehe) Then Print "Kolition"


Jedoch weiß ich nicht wie ich den Befehl benutzen soll bzw. was ich genau machen soll Smile Vllt könntet ihr mir weiterhelfen? Ich danke euch!

Code: [AUSKLAPPEN]

Graphics 800,600,32
SetBuffer BackBuffer()

Oval 30,30,30,30
Rect 2,2,20,100
Ball= CreateImage(30,30)
GrabImage Ball,30,30
Kelle = CreateImage(20,100)
GrabImage Kelle,2,2

Repeat
Cls
ClsColor r,g,b
xm=MouseX()
ym=MouseY()
DrawImage Kelle,2,ym
DrawImage Kelle,778,600-100-ym
DrawImage Ball,xball,yball
If ym > 300 Then ym=300
If yball > 570 Then
w=-Rnd(1,10)
ElseIf yball < 10 Then
w=+Rnd(1,10)
EndIf
yball=yball+w
If xball > 770 Then
s=-Rnd(1,10)
ElseIf xball < 10 Then
s=+Rnd(1,10)
EndIf
xball=xball+s
If xball < 10 Or xball > 770 Then
r= Rnd(0,255)
g=Rnd(0,255)
b=Rnd(0,255)
Delay 100
EndIf
Flip
Until MouseHit(2)
End


mfg
Hansy

TheMatrix

BeitragMi, Dez 20, 2006 14:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Easy doing.
Du hast doch schon dein Problem selbst gelöst Wink .

Füge das noch ein:
Code: [AUSKLAPPEN]

 ;Kollision
 If ImagesCollide(kelle,2,ym,0,ball,xball,yball,0) Or ImagesCollide(kelle,778,500-ym,0,ball,xball,yball,0) Then s=s*-1


Einfach den xSpeed *-1 immer nehmen und der Ball fliegt zurück.

mfg, Manu
°_° °.° °~° °v° .. -.-
 

Hansy

BeitragMi, Dez 20, 2006 14:30
Antworten mit Zitat
Benutzer-Profile anzeigen
habe ich auch gerade bemerkt Razz

Naja aber danke Smile Jetzt ist mein Game ja fertig Smile

Was könnte ich jetzt noch machen,d.h., welches Projeckt sollte ich jetzt anfangen .. Aber nicht vergessen, dass ich noch ein Noob bin Wink

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Dez 20, 2006 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Pacman zB (ist schwieriger als man denkt)
Space Invaders mit Types für die Gegner
etc...

Auf was du grad Lust hast. Oder ein Menü, kann man immer gebrauchen...

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group