K čemu se používá jazyk java? Četl jsem, že složí spíše pro větší firemní aplikace, protože pro real-time aplikace- počítačové hry, nemá dostatečnou rychlost. Dále se dá používat i v mobilních zařízeních?
Příspěvky odeslané z IP adresy 194.12.42.–
v čem se programují věci na windows RT?
Co je ještě za programovací jazyky na chytré telefony a tablety?
A co je podle tebe nejvhodnější jazyk na jednoduché hry, záznamy dat-něco jako zápisník, na tablety a chytré telefony
zalíbili se mi dvě knížky, pro začátek chci něco v češtině. Nemáte s nimi zkušenost? Knižky by měly být v javě?
http://knihy.cpress.cz/programujeme-hry-pro-android-4.html
http://knihy.cpress.cz/android-4.html
Takže když mám program v Javě na PC, bude mi fungovat na androidu, ne to musí mít sví pecifika, jako jiný knihovny a tak?
Jaké je spojení Java a Android, android je defakto stejný jako java ne?
CO bude dělat následující kód? Kde je dobré ho používat na rozdíl od kódu?
class pokus extends JPanel{
public void paintComponent(Graphics g){
super.paintComponent(g)
g.fillRect(10, 10, 10, 10);
}
}
public void render(Graphics g){
g.fillRect(10, 10 ,10 ,10)
}
// někde by byla smička s repaint().
Trochu se to rozbilo;).
package GamePackage;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
import javax.swing.text.html.HTMLDocument.HTMLReader.CharacterAction;
public class Database{
private File file;
private BufferedWriter bw;
private BufferedReader br;
private int UpButton=KeyEvent.VK_UP;
private int DownButton=KeyEvent.VK_DOWN;
private int LeftButton=KeyEvent.VK_LEFT;
private int RightButton=KeyEvent.VK_RIGHT;
private int ShootButton=KeyEvent.VK_SPACE;
private int FrameSize=800;
/*****************************************************
* Constructor
*****************************************************/
public Database(){
file=new File("D:\\test.txt");
MakeOrReset();
System.out.println(GetKeyID("UpButton"));
}
/*****************************************************
* MakeOrResetmethod
*****************************************************/
private void MakeOrReset(){
try {
if (!file.exists()) {
file.createNewFile();
}
bw = new BufferedWriter(new FileWriter(file.getAbsoluteFile()));
bw.write("UpButton "+UpButton);
bw.newLine();
bw.write("DownButton "+DownButton);
bw.newLine();
bw.write("LeftButton "+LeftButton);
bw.newLine();
bw.write("RightButton "+RightButton);
bw.newLine();
bw.write("ShootButton "+ShootButton);
bw.newLine();
bw.write("FrameSize " +FrameSize);
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public int GetKeyID(String ButtonName){
int IDNumber=0;
try{
br = new BufferedReader(new FileReader(file.getAbsoluteFile()));
String line = null;
while ((line = br.readLine()) != null) {
Scanner read = new Scanner(line);
String word1 = read.next();
String word2 = read.next();
IDNumber = Integer.parseInt(word2);
read.close();
if(ButtonName==word1)
break;
}
br.close();
}catch(IOException e){}
return IDNumber;
}
}
Mám 2 metody ve třídě, jedna vepíše něco do souboru a druhá má najít příslušnou oblast dále vypsat ID klávesy, ale chyba je, že vyhledávání nefunguje, tak jak má, co s tím?
package GamePackage;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
import javax.swing.text.html.HTMLDocument.HTMLReader.CharacterAction;
public class Database{
private File file;
private BufferedWriter bw;
private BufferedReader br;
private int UpButton=KeyEvent.VK_UP;
private int DownButton=KeyEvent.VK_DOWN;
private int LeftButton=KeyEvent.VK_LEFT;
private int RightButton=KeyEvent.VK_RIGHT;
private int ShootButton=KeyEvent.VK_SPACE;
private int FrameSize=800;
/*****************************************************
* Constructor
*****************************************************/
public Database(){
file=new File("D:\\test.txt");
MakeOrReset();
System.out.println(GetKeyID("UpButton"));
}
/*****************************************************
* MakeOrResetmethod
*****************************************************/
private void MakeOrReset(){
try {
if (!file.exists()) {
file.createNewFile();
}
bw = new BufferedWriter(new FileWriter(file.getAbsoluteFile()));
bw.write("UpButton "+UpButton);
bw.newLine();
bw.write("DownButton "+DownButton);
bw.newLine();
bw.write("LeftButton "+LeftButton);
bw.newLine();
bw.write("RightButton "+RightButton);
bw.newLine();
bw.write("ShootButton "+ShootButton);
bw.newLine();
bw.write("FrameSize " +FrameSize);
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public int GetKeyID(String ButtonName){
int IDNumber=0;
try{
br = new BufferedReader(new FileReader(file.getAbsoluteFile()));
String line = null;
while ((line = br.readLine()) != null) {
Scanner read = new Scanner(line);
String word1 = read.next();
String word2 = read.next();
IDNumber = Integer.parseInt(word2);
read.close();
if(ButtonName==word1)
break;
}
br.close();
}catch(IOException e){}
return IDNumber;
}
}
Potřeboval bych získat ID znaku a uložit ho do proměnné. když to udělám takhle tak mi eclipse hlásí: The static field KeyEvent.VK_DOWN should be accessed in a static way.
private KeyEvent e;
private int DownButton=e.VK_DOWN;
když ve třídě A podědím třídu B a v B něco změním, projeví se mi to i v A nebo ne?
Tady máš podle mě nejednodušší cestu, jak to vyřešit. Když máš jen dva směry, to jest Výhra nebo prohra, je lepší používat nextBoolean(), který vrací náhodnou hodnotu false nebo true.
import java.util.Random;
public class nahoda {
public static void main(String[] args) {
Random rand=new Random(); //vytvoření odkazu na třídu random
boolean vyhra; //proměná do která se uloží true nebo false
vyhra=rand.nextBoolean(); //inicializace proměné náhodnou hodnotou true nebo false
if(vyhra){ //jestliže proměná má hodnotu true
System.out.println("vyhrál jsi");
}else{ //jestliže proměná má hodnotu false
System.out.println("prohrál jsi");
}
}
}
Potřeboval bych něco čím bych nahradil metodu intersects() na porovnávání průniků čtverců. něco na porovnaní kolizi čtverce a polygonu, Protože zmíněná metoda přímá pouze parametry Rectangle
můj problém:
public Polygon getBoundingPOlygon(){
int y[]={(int)Ypos, (int)Ypos+ShipImage.getHeight(null), (int)Ypos+ShipImage.getHeight(null)};
int x[]={(int)Xpos+ShipImage.getWidth(null)/2-1, (int)Xpos-1, (int)Xpos+ShipImage.getWidth(null)-1};
return new Polygon(x, y, x.length);
}
public Rectangle getBoundingRect(){
return new Rectangle((int)Xpos, (int)Ypos, EnemyImage.getWidth(null), EnemyImage.getHeight(null));
}
if(LLE.get(x).getBoundingRect().intersection(Game.ConnectToShip().getBoundingPolygon())){
Game.stop();
}
Už jsem na to přišel BufferStrategy musí být uzavřen v cyklu;).
Zkusil jsme udělat jednoduchý program, ale nefungoval. Chyba se nejspíš bude vyskytovat ve vytvoření grafiky v metodě render().
import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
public class main extends Canvas {
public static final int WIDTH=320;
public static final int HEIGHT=WIDTH/16*9;
public static final int SCALE=2;
private BufferedImage image=new BufferedImage(HEIGHT, WIDTH, BufferedImage.TYPE_INT_RGB);
public static void main(String[] args) {
main main=new main();
main.setPreferredSize(new Dimension(WIDTH*SCALE, HEIGHT*SCALE));
main.setMaximumSize(new Dimension(WIDTH*SCALE, HEIGHT*SCALE));
main.setMinimumSize(new Dimension(WIDTH*SCALE, HEIGHT*SCALE));
JFrame frame=new JFrame("pokus");
frame.add(main);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
main.render();
}
private void render(){
BufferStrategy bs=this.getBufferStrategy();
if(bs==null){
createBufferStrategy(3);
return;
}
Graphics g=bs.getDrawGraphics();
/////////////////////////////////////////////
g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
/////////////////////////////////////////////
g.dispose();
bs.show();
}
}
Potřeboval bych vysvětlit jak funguje tato část kódu, nebo nějaký tutorial klidně v angličtině ;).
BufferStrategy bs=this.getBufferStrategy();
if(bs==null){
createBufferStrategy(3);
return;
}
Graphics g=bs.getDrawGraphics();
/////////////////////////////////////////////
g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
/////////////////////////////////////////////
g.dispose();
bs.show();
Dobrý den, potřeboval bych vysvětlit metodu createGraphics(), nebo nějaký tutoriál na ní. Mám konkrétní příklad.
Graphics2D g2d;
BufferedImage backbuffer;
backbuffer = new BufferedImage(640, 480, BufferedImage.TYPE_INT_RGB);
g2d = backbuffer.createGraphics();
Samozřejmě, když zavolám metodu graphics tam mi vrátí Graphics, ale ne Graphics2D od, které potřebuji metodu fill(shape)? Nedal by mi jsem prosím někdo kus kódu? :)
Zdar, vyskytl se další problém. Proč mi nefunguje metoda MakeRectangel?
zdroják
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Shape;
import javax.swing.JComponent;
public class gameGraphics extends JComponent{
private Rectangle[] rectPole = new Rectangle[5];
private Graphics g;
private Graphics2D g2d = (Graphics2D)g;
private int index=0;
public void paint (Graphics g) {
}
public void MakeRectangle(int x, int y, int vyska, int sirka){
rectPole[index] = new Rectangle(x, y, sirka, vyska);
g2d.fill( rectPole[index]);
index++;
}
}
Vytvoříš si Objekt té třídy, takže třeba :
public class kalkulacka{
//vytvoření odkazu na třídu operace
operace odkaz=new operace();
public kalkulacka(){
//zavolání metody z jiné třídy. JMÉNO ODKAZU.METODA, PROMĚNÁ.
// metoda, proměná musí být vždy public.
odkaz.plus();
}
}
class operace{
public void plus(){
}
public void minus(){
}
public void krat(){
}
public void deleno(){
}
}
Zdar lidi, potřeboval bych pomoct s vytvořením grafické metody, která vytvoří nějaký grafický objekt a jeho jméno uloží do pole, nakreslí ho do JFrame. Mělo by to vypadat nějak následovně:
import java.awt.Graphics;
import java.awt.Graphics2D;
public class grafika {
private String[] nameArray = new String[4];
private Graphics g;
private Graphics2D g2d = (Graphics2D)g;
public void paint (Graphics g) {
}
public void rectangelMaker(int X, int Y, int W, int H, String name){
// vytvoření čtverce
// uložení do jména do pole
//vykreslení objektu
g2d.fill(name);
}
}
Díkes, ještě jedna otázka, je dobré hromadit odkazy na objekty za sebe, jako například:
gameC.paintC.poziceObjektuX
Pardon nevyřešil :(, Udělala jsem si třídu ShapeMover, která mi pohybuje s obrazcem. Ježe já jí chtěl udělat multifunkční, že bych do ní přidal odkaz na objekt, třeba čtverec a ona by mi ho posunula na nějaké souřadnice.
Hlavní ovládací třída
package ShapeMover;
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JFrame;
// Třída v níž se bude náchazet programy hry
public class gameClass {
public JFrame frame=new JFrame();
public paintClass paintC=new paintClass();
private Thread ThreadShapeMover2;
private int souradniceX2=0;
private int souradniceY2=0;
public gameClass(){
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.getContentPane().add(paintC);
frame.setVisible(true);
posunObjektu(souradniceX2, souradniceY2);
}
//metoda, která volá posun objektu;
public void posunObjektu(int souradniceX2, int souradniceY2){
//Zavolání třídy ShapeMover v novám vlákně.
ThreadShapeMover2=new ShapeMover(this, souradniceX2, souradniceY2);
ThreadShapeMover2.start();
}
}
//vykreslovací třída
class paintClass extends JComponent{
//pozice objektu musí být typu double, protože se v counteru se nepříčítají celá čísla
public double poziceObjektuX=200;
public double poziceObjektuY=200;
public void paint(Graphics g){
g.fillRect((int)poziceObjektuX, (int)poziceObjektuY, 50, 50);
}
}
třída, která posouvá objekt
package ShapeMover;
//třída ShapeMover, která posouvá objekt
public class ShapeMover extends Thread {
private gameClass gameC=null;
private int souradniceX2;
private int souradniceY2;
private int souradnicovyDelitel=150;
//konstruktor, 3 parametry: odkaz na kmenovou přídu a souřadníce na níž se má onjekt přesunout
public ShapeMover(gameClass gameC, int souradniceX2, int souradniceY2) {
this.gameC=gameC;
this.souradniceX2=souradniceX2;
this.souradniceY2=souradniceY2;
}
//mnové vlákno volá metodu run
public void run(){
double counterY=souradniceX2-gameC.paintC.poziceObjektuX; counterY/=souradnicovyDelitel;
double counterX=souradniceY2-gameC.paintC.poziceObjektuY; counterX/=souradnicovyDelitel;
for(int x=0;x<souradnicovyDelitel;x++){
gameC.paintC.poziceObjektuX+=counterX;
gameC.paintC.poziceObjektuY+=counterY;
gameC.paintC.repaint();
try {
Thread.sleep(25);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Okey díky, svůj problém jsem vyřešil ;).
Zdravim, V 2dGraphics bych potřeboval překreslit pouze jediný objekt, čili potřebuji nějak získat jeho odkaz, jak to udělat? V následujícím příkladu chci překreslit jen fillRecet, ne zbytek.
public void paint(Graphics g){
g.fillRect(560, 50, 50, 50);
g.drawRect(50, 50, 50, 50);
g.drawString(text, 50, 50);
}
Ještě jedna drobnost potřeboval bych předat parametrem odkaz na instanci třídy animation do třídy MyTask, abych mohl měnit její atributy, konkrétně int x.
package PresunObjektu;
import java.awt.Graphics;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class animation extends JComponent {
//vytvoření odkazu na timer
Timer timer = new Timer("Printer");
public int x=0;
public animation() {
JFrame frame=new JFrame();
frame.setSize(400, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//vytvoření odkazu na prováděcí úlohu
MyTask t = new MyTask();
timer.schedule(t, 0, 1000);
frame.getContentPane().add(this);
frame.setVisible(true);
}
public void paint(Graphics g) {
g.fillRect(x, 50, 50, 50);
}
}
class MyTask extends TimerTask {
public void run() {
}
}
Sleepy díky, moc jsi mi pomohl, už jsem si to přizpůsobil jak jsme potřeboval díky ;).
Nechce mi sem někdo dát kus funkčního kódu? :)
Použil jsem jiný, ale stále to tak dělá a zasekává se to;)
long t0,t1;
t0=System.currentTimeMillis();
do{
t1=System.currentTimeMillis();
}
while (t1-t0<100);
Potřeboval bych pomoc s přesunem objektu, vždycky když zmáčknu tlačítko, tak se mi program na chvíli zasekne. Co s tím?
package PresunObjektu;
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class PresunObjektu {
obrazce obrazce=new obrazce();
JFrame frame=new JFrame();
JButton but1 = new JButton("posun o 100 PX");
public PresunObjektu() {
//-----------Frame-----------------------------------
frame.setSize(400, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(obrazce);
frame.add(but1, BorderLayout.NORTH);
//-------------Tlacitko, Posluchac-------------------
but1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
presunObjektu();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
});
frame.setVisible(true);
}
public void presunObjektu() throws InterruptedException{
for(int X=0;X<100;X++){
obrazce.X++;
obrazce.repaint();
Thread.sleep(100);
}
}
}
class obrazce extends JComponent{
int X=50;
int Y=50;
public void paint(Graphics g){
g.drawRect(X, Y, 50, 50);
}
}
Díky moc, je to opravdu jednoduché ;).
Dobrý den, Mám napsat algoritmus na najití společných dělitelů. Je tento program napsán programátorsky dobře? občas na mě vyskočí : ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2 JDWP exit error AGENT_ERROR_NO_JNI_ENV(183): [../../../src/share/back/util.c:838]. Ale v zásadě program naprosto dobře funguje. Ještě jsem se tem snažil pořešit, abych neodečítal jedničku od většího čísla.
package Algoritmy;
public class najitiDelitelu {
public static void main(String[] args) {
int cislo1 = 4656, cislo2 = 1000000000, Delitel;
if(cislo1<cislo2){
int Prehazovac=cislo1;
cislo1=cislo2;
cislo2=Prehazovac;
}
for(int x=cislo2;x>=1;x--){
if(cislo1%x==0&&cislo2%x==0){
Delitel=x;
System.out.println(Delitel);
}
}
}
}