Я пытаюсь запрограммировать игру Понг с библиотекой " bGL OOP".
(bGL OOP - это библиотека, которую вы можете использовать для создания геометрических фигур c. Эти рисунки можно редактировать, перемещая или рисуя их.)
Я уже создал самую важную элементы. Но теперь у меня есть проблемы с их использованием:
Что я планирую:
У меня уже есть лопасти для мяча, которыми вы можете управлять с помощью кнопок (это работает) , Но автоматическое движение мяча c не работает должным образом. Мяч должен двигаться в указанном направлении c, если он находится в допустимой зоне, например, в зоне для игры. Если он находится в углу этой области, он должен отскочить в противоположном направлении. Так что, если мяч слишком высокий, он должен подпрыгнуть до дна. Если мяч слишком далеко к правой стороне, он должен отскочить к левой стороне. Смена направлений уже работает. Но если он подпрыгивает, например, до дна, потому что мяч был слишком высок, мяч сразу же go снова поднимется, потому что это установлено в направлении, в котором шар должен go, если он находится в допустимой зоне для игры.
Таким образом, мяч не движется ни в каком направлении. Это просто дрожит.
Где мне нужна помощь:
Моя программа постоянно проверяет координаты шара и все координаты, в которых должен отскочить шар. Если мяч слишком высокий, он отскакивает. Но сразу после этого он уже не слишком высок, поэтому снова поднимается.
Есть ли возможность избежать этих немедленных действий и позволить мячу двигаться в определенных c направлениях, пока он не окажется в другой области, в которой он должен отскочить назад? Может быть, как поместить движение в al oop, чтобы оно не проверяло, находится ли оно за пределами зоны для игры?
Поскольку я из Германии, часть моего кода написана на немецком языке. Если вы хотите проверить команды со ссылкой на странице bGL OOP выше, вы можете посмотреть мой оригинальный код ниже.
Переводная версия:
import bGLOOP.*;
public class game {
game() {
new GLKamera();
GLLight Light;
GLKeyboard Keyboard_Input;
GLMouse Mouse_Input;
new GLHeaven();
Light = new GLLight(100,100,100);
GLLightobject Ball;
Ball = new GLLightobject(new GLKugel(0, 0, 0, 7));
Ball.setColor(.4, .5, .2);
Ball.scale(1.5);
//defining inputs
Keyboard_Input = new GLKeyboard();
Mouse_Input = new GLMouse();
//defining inputs
GLCuboid Block_player1; //Block left
Block_player1 = new GLCuboid(-500, 50, 0, 20, 150, 0);
GLCuboid Block_player2; //Block right
Block_player2 = new GLCuboid(500, 50, 0, 20, 150, 0);
double Factor_X = 3;
double Factor_Y = 2;
while (true){ //checking of all inputs
if (Keyboard_Input.isPressed()){ //keyboard inputs
if (Keyboard_Input.up()) {
Block_player2.move(0,4,0);
Sys.wait(70);
}
if (Keyboard_Input.down()) {
Block_player2.move(0,-4,0);
Sys.wait(70);
}
char button = Keyboard_Input.giveCharacter();
System.out.print(button);
if (button == 'w') {
Block_player1.move(0,4,0);
Sys.wait(10);
}
if (button == 's') {
Block_player1.move(0,-4,0);
Sys.wait(10);
}
}
while (Ball.gibY() <= 30 && Ball.gibY() >= -30) {
Ball.move(Factor_X,Factor_Y,0);
Sys.wait(10);
}
if (Ball.gibY() > 30) {
Ball.move(Factor_X-0.5,-Factor_Y,0);
Sys.wait(10);
}
if (Ball.gibY() < -30) {
Ball.move(Factor_X+0.5,Factor_Y,0);
Sys.wait(10);
}
if (Ball.gibX() > 30) {
Ball.move(-Factor_X,Factor_Y+0.3,0);
Sys.wait(10);
}
if (Ball.gibX() < -30) {
Ball.move(Factor_X+0.5,Factor_Y,0);
Sys.wait(10);
}
}
}
}
Мой оригинальный код:
import bGLOOP.*;
public class Spiel {
Spiel() {
new GLKamera();
GLLicht Licht;
GLTastatur Tastatur_Input;
GLMaus Maus_Input;
new GLHimmel();
Licht = new GLLicht(100,100,100);
GLLichtobjekt Ball;
Ball = new GLLichtobjekt(new GLKugel(0, 0, 0, 7));
Ball.setzeFarbe(.4, .5, .2);
Ball.skaliere(1.5);
//Inputs Anfang
Tastatur_Input = new GLTastatur();
Maus_Input = new GLMaus();
//Inputs Ende
GLQuader Block_Spieler1; //Block links
Block_Spieler1 = new GLQuader(-500, 50, 0, 20, 150, 0);
GLQuader Block_Spieler2; //Block rechts
Block_Spieler2 = new GLQuader(500, 50, 0, 20, 150, 0);
double Faktor_X = 3;
double Faktor_Y = 2;
while (true){ //checking of all inputs
if (Tastatur_Input.istGedrueckt()){ //keyboard inputs
if (Tastatur_Input.oben()) {
Block_Spieler2.verschiebe(0,4,0);
Sys.warte(70);
}
if (Tastatur_Input.unten()) {
Block_Spieler2.verschiebe(0,-4,0);
Sys.warte(70);
}
char taste = Tastatur_Input.gibZeichen();
System.out.print(taste);
if (taste == 'w') {
Block_Spieler1.verschiebe(0,4,0);
Sys.warte(10);
}
if (taste == 's') {
Block_Spieler1.verschiebe(0,-4,0);
Sys.warte(10);
}
}
while (Ball.gibY() <= 30 && Ball.gibY() >= -30) {
Ball.verschiebe(Faktor_X,Faktor_Y,0);
Sys.warte(10);
}
if (Ball.gibY() > 30) {
Ball.verschiebe(Faktor_X-0.5,-Faktor_Y,0);
Sys.warte(10);
}
if (Ball.gibY() < -30) {
Ball.verschiebe(Faktor_X+0.5,Faktor_Y,0);
Sys.warte(10);
}
if (Ball.gibX() > 30) {
Ball.verschiebe(-Faktor_X,Faktor_Y+0.3,0);
Sys.warte(10);
}
if (Ball.gibX() < -30) {
Ball.verschiebe(Faktor_X+0.5,Faktor_Y,0);
Sys.warte(10);
}
}
}
}