Bewegung von Rechtecken - Ponspiel
Übersicht

HansyBetreff: Bewegung von Rechtecken - Ponspiel |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() mfg Hansy |
||
Problemchen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So jetzt kapier ich das aber immer noch nicht ganz ![]() ![]() 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) |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Achso ![]() ![]() 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) |
||
Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich danke euch!
Ich melde mich dann wenn ich wieder ein Prob habe ![]() |
||
Hansy |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So nun ist mein Proggi schon "recht" gut ![]() 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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Easy doing.
Du hast doch schon dein Problem selbst gelöst ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
habe ich auch gerade bemerkt ![]() Naja aber danke ![]() ![]() Was könnte ich jetzt noch machen,d.h., welches Projeckt sollte ich jetzt anfangen .. Aber nicht vergessen, dass ich noch ein Noob bin ![]() |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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... |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group