Java tutorial
// Copyright 2012 Anton Holm, Arez Arazu, Gustav Larsson // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package net.dat.killemall.screens; import net.dat.killemall.model.World; import net.dat.killemall.view.WorldRenderer; import net.dat.killemall.controller.WorldController; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.Game; import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.Screen; import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; public class GameScreen implements Screen, InputProcessor { private World gameWorld; private WorldRenderer renderer; private WorldController controller; private Game KEAGame; //Sprites som skall visas p GameScreen hmtas. private SpriteBatch spriteBatch; private Texture upTexture; private Texture downTexture; private Texture fireTexture; private Texture heartTexture; //Hmtar tillten strsta storlek fr hjd och bredd float x = Gdx.graphics.getWidth(); float y = Gdx.graphics.getHeight(); private int width, height; //En konstruktor fr en GameScreen med koppling till aktuellt spel // krvs fr att kunna hnvisa korrekt mellan olika Screens i applikationen. public GameScreen(Game ga) { KEAGame = ga; } @Override public void render(float delta) { Gdx.gl.glClearColor(0.1f, 0.1f, 0.1f, 1); Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); //Om boolean-variabeln win i GameWorld visar true r samtliga niver avklarade. // D skall applikationen istllet visa upp vr WinScreen. if (gameWorld.getWin()) { KEAGame.setScreen(new WinScreen(KEAGame)); } //Om boolean-variabeln fail i GameWorld visar true r samtliga extraliv frrlorade. // D skall applikationen istllet visa upp vr FailedScreen. if (gameWorld.getFail()) { KEAGame.setScreen(new FailedScreen(KEAGame)); } //Hmtar aktuell controller samt renderare fr aktuell skrm // och uppdaterar stndigt dessa fr att aktuell visad bil stmmer // verrens med inpus samt spellogik. controller.update(delta); renderer.render(); spriteBatch.begin(); //Ritar ut samtliga knappar som anvnds p skrmen. Plaeringen av dessa r enbart // vald utifrn optimal ergonomi fr spelaren. spriteBatch.draw(upTexture, width / 40, height / 3, width / 10, height / 8); spriteBatch.draw(downTexture, width / 40, height / 15, width / 10, height / 8); spriteBatch.draw(fireTexture, (width - width / 10), height / 3, width / 10, height / 8); // Ritar ut samtliga extraliv som spelaren har kvar. Placeringen av dessa r enbart // vald utifrn lmplighet p skrmen. // Antal varv i for-loopen baseras p variabeln health i GameWorld. for (int i = 0; i < gameWorld.getHealth(); i++) { spriteBatch.draw(heartTexture, width / 22 + (i * (width / 20)), (height - height / 12), width / 22, height / 17); } spriteBatch.end(); } //Om spelaren vnder p skrmen renderas spelet p ny tillgnglig storlek. @Override public void resize(int width, int height) { renderer.setSize(width, height); this.width = width; this.height = height; } //Hmtar aktuell spelplan, renderer och kontroll. Input kopplas sedan till // aktuella tryck som grs p spelplanen. @Override public void show() { gameWorld = new World(); renderer = new WorldRenderer(gameWorld, false); controller = new WorldController(gameWorld); Gdx.input.setInputProcessor(this); // Hmtar aktuell spritebatch fr senare anvndning. spriteBatch = new SpriteBatch(); upTexture = new Texture(Gdx.files.internal("images/up2.png")); downTexture = new Texture(Gdx.files.internal("images/down2.png")); fireTexture = new Texture(Gdx.files.internal("images/fire2.png")); heartTexture = new Texture(Gdx.files.internal("images/heart.png")); } @Override public void hide() { // TODO Auto-generated method stub } @Override public void pause() { // TODO Auto-generated method stub } @Override public void resume() { // TODO Auto-generated method stub } //Nr denna Screen stngs ned r input ej lngre aktuell och dumpas drmed. @Override public void dispose() { Gdx.input.setInputProcessor(null); } //Metod fr att koppla aktuella nedtryckningar av tangenter under skrmens //anvndning till knapptryckningar i controller. @Override public boolean keyDown(int keycode) { if (keycode == Keys.UP) controller.upPressed(); if (keycode == Keys.DOWN) controller.downPressed(); if (keycode == Keys.X) controller.firePressed(); return true; } //Metod fr att koppla upphrandet av aktuella nedtryckningar av tangenter under skrmens //anvndning till knapptryckningar i controller. @Override public boolean keyUp(int keycode) { if (keycode == Keys.UP) controller.upReleased(); if (keycode == Keys.DOWN) controller.downReleased(); if (keycode == Keys.X) controller.fireReleased(); return false; } @Override public boolean keyTyped(char character) { // TODO Auto-generated method stub return false; } // Metod fr att koppla aktuell berring av skrmen i androidtelefonen // till controllern. If-satserna baseras p placeringen av vilka zoner som ska // reagera p tryck. Zonerna r bestmde efter optimal ergonomi och r kopplade // till knappar som mlas ut under render-metod. Kopplar knapptryck till aktuell controller. @Override public boolean touchDown(int x1, int y1, int pointer, int button) { if (x1 > width / 40 && x1 < (width / 40 + width / 8) && y1 > (y - (height / 3 + height / 6)) && y1 < (y - height / 3)) { controller.upPressed(); } if (x1 > width / 40 && x1 < (width / 40 + width / 8) && y1 > (y - (height / 15 + height / 6)) && y1 < (y - height / 15)) { controller.downPressed(); } if (x1 > (width - width / 6) && x1 < (width) && y1 > (y - (height / 3 + height / 6)) && y1 < (y - height / 4)) { controller.firePressed(); } return true; } // Metod fr att koppla aktuell upphrande av berring av skrmen i androidtelefonen // till controllern. If-satserna baseras p placeringen av vilka zoner som ska // reagera p tryck. Zonerna r bestmde efter optimal ergonomi och r kopplade // till knappar som mlas ut under render-metod. Kopplar knapptryck till aktuell controller. @Override public boolean touchUp(int x1, int y1, int pointer, int button) { if (x1 > width / 40 && x1 < (width / 40 + width / 8) && y1 > (y - (height / 3 + height / 6)) && y1 < (y - height / 3)) { controller.upReleased(); } if (x1 > width / 40 && x1 < (width / 40 + width / 8) && y1 > (y - (height / 15 + height / 6)) && y1 < (y - height / 15)) { controller.downReleased(); } if (x1 > (width - width / 10) && x1 < ((width - width / 10) + width / 8) && y1 > (y - (height / 3 + height / 6)) && y1 < (y - height / 3)) { controller.fireReleased(); } return true; } // Det skall inte vara mjligt att dra fingret ver skrmen fr att rra p sig. @Override public boolean touchDragged(int x, int y, int pointer) { // TODO Auto-generated method stub return false; } // Det skall inte vara mjligt att dra fingret ver skrmen fr att rra p sig. @Override public boolean touchMoved(int x, int y) { // TODO Auto-generated method stub return false; } // Det skall inte vara mjligt att scrolla p skrmen. @Override public boolean scrolled(int amount) { // TODO Auto-generated method stub return false; } }