Problem vid lättare spelprogrammering

Permalänk
Medlem

Problem vid lättare spelprogrammering

Ännu en skoltråd, men jag vill egentligen bara ha tips och idéer på hur vi som grupp kan lösa den delen vi fastnat på.

Vi har i vårt projekt uppgift att göra en klon av spelet Krakout som är väldigt likt dx ball kan man säga. Vi ska göra vissa ändringar mot orginalspelet som extra features och annat smått och gott.
Det vi fått från börjat är ett framework som innehåller gui och metoder som man kan modifiera beroende på vad för spel man gör, en del hjälp med andra ord.

Det vi har än så länge är en kula som har en exakt fart. Vi har väggar som skickar tillbaka kulan via infalls/utfalls vinkel. Vi har en paddel som på samma sätt som väggarna skickar tillbaka kulan via infalls/utfalls vinkel. När spelet startar är kulen "klistrad" på paddeln och man trycker space för att släppa iväg kulan.

Det vi vill just nu är att kulan ska röra sig tillsammans med paddeln fram till man tryckt space och triggat kulans rörelse, i dagsläget går inte detta.

Jag bifogar kod för vår game-klass där ni kan se en del av koden, det är möjligt att råkat utelämna vital information men då får ni gärna skriva det.

/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package GameFrameworkJavaFX; import Actors.Bat; import Actors.Ball; import java.util.ArrayList; import javafx.scene.input.KeyCode; /** * * @author anc */ public class Game { //testar här private static Game game; //A reference to the singleton game instance. Gui gui; Bat bat; Ball ball; //Here you can add your own objects... private final ArrayList<Bat> actors; private Game(Gui gui) { this.gui = gui; actors = new ArrayList(); createActors(); } public static Game getInstance() { return game; } public static void createGameAndSetGui(Gui gui) { game = new Game(gui); } public ArrayList<Bat> getActors() { return actors; } public void addToWorld(Bat actor) { actors.add(actor); gui.addImageView(actor.getImageView()); } public void removeActorFromWorld(Bat actor) { actors.remove(actor); gui.removeImageView(actor.getImageView()); } public final void createActors() { System.out.println("Creating actors..."); /* * Create a new actor of sub class Ball. Give it the name "Ball", * choose the image to use from directory /images: green_ghost.png * Give the ghost size = 50x50 pixels. */ ball = new Ball("Ball", "ball.png", 30); ball.setLocation(1722, 350); //set the ghost start position to x = 50, y = 50. ball.setSpeedX(0); //give the ghost some initial speed. ball.setSpeedY(0); //this.ball.setBallHeight(50); //this.ball.setBallWidth(50); addToWorld(ball); //add it into the world! //Create a cookie. It's a very simple actor, so use the Bat base class. //Name the object to "Cookie", point to a certain image, and give it size 50x50 pixels. //Set the position of the cookie to x = 300, y = 300. //Add it to the world! bat = new Bat("Bat", "bat_large.png",30); bat.setLocation(1750, 300); this.bat.setHeight(135); this.bat.setWidth(30); addToWorld(bat); } public void collissionBall() { bat.getHeight(); bat.getWidth(); ball.getBallHeight(); ball.getBallWidth(); if (ball.collidesWith(bat)) { ball.setSpeedX(-ball.getSpeedX()); } } public void timeTick() { //First all actors do their default actions. for (Bat actor : actors) { //If an actor has some speed, it will automatically move here... bat.timeTick(); ball.timeTick(); collissionBall(); /** if (ghost.collidesWith(ball)) { removeActorFromWorld(ghost); }**/ } } //Then, you can add more code here... //end of timeTick public void keyPressed(KeyCode id) { System.out.println("You pressed key: " + id.toString()); if ((id == KeyCode.UP)) { //What should happen if user presses ARROW-UP? bat.setSpeedY(-15); ball.setSpeedY(-15); } else if ((id == KeyCode.DOWN)) { bat.setSpeedY(15); ball.setSpeedY(15); /** * } else if (id == KeyCode.LEFT) { cookie.setSpeedX(-15); } else if * (id == KeyCode.RIGHT) { cookie.setSpeedX(15); } else if (id == * KeyCode.A) {* */ } if ((id == KeyCode.SPACE)) { ball.setSpeedX(-15); ball.setSpeedY(-5); } } void keyReleased(KeyCode id) { System.out.println("You released key: " + id.toString()); if (id == KeyCode.UP) { if ((bat.getSpeedY() < 0) && (ball.getSpeedY() <0)) { bat.setSpeedY(0); ball.setSpeedY(0); } } else if (id == KeyCode.DOWN) { if ((bat.getSpeedY() > 0) && (ball.getSpeedY() >0)) { bat.setSpeedY(0); ball.setSpeedY(0); } } else if (id == KeyCode.LEFT) { if (bat.getSpeedX() < 0) { bat.setSpeedX(0); } } else if (id == KeyCode.RIGHT) { if (bat.getSpeedX() > 0) { bat.setSpeedX(0); } } else if (id == KeyCode.SPACE) { } } public void mousePressed(boolean leftMouse, int x, int y) { System.out.printf("Mouse clicked %s, x = %d, y = %d\n", leftMouse ? "LEFT BUTTON" : "OTHER BUTTON", x, y); } }//end of Game class

Dold text

Alla typer av knuffar i rätt riktning är väldigt uppskattat!
Tack på förhand!

Visa signatur

"Happiness is only real when shared"

Permalänk
Hedersmedlem

Så vitt jag kan se kan ni eventuellt ha lite oönskat beteende om man trycker space flera gånger.

Men över till din fråga. Fundera på följande. Hur identifierar ni att kulan är "klistrad"? När ni lyckats hitta en bra lösning eller svar på det (ni behöver egentligen inte ändra någon kod för det) så är ju lösningen att flytta kulan på samma vis som paddeln om den är klistrad. Dvs om paddeln flyttar 50 pixlar i en riktning så flyttar ni kulan 50 pixlar i samma riktning.

Visa signatur

Använd gilla för att markera nyttiga inlägg!