Я работаю над игрой для Android в Android Studio. Но я новичок в Java и Android Studio и хочу очистить код, создав классы для логических частей игры. Моя цель на последние пару дней — заставить класс Draw выполнять всю работу по рисованию экрана, которая будет состоять из манипуляций с растровыми изображениями и операторов drawText.
Однако я даже не могу инициализировать свой Canvas. Я испробовал всевозможные решения, упомянутые в других вопросах на этом сайте, но ни одно из них не связано с настройкой Canvas в классе. Чутье подсказывает, что мне что-то не хватает в конструкторе Draw, но я не могу это понять.
На данный момент код компилируется нормально, но при запуске появляется просто черный экран. Тест предназначен только для отображения частоты кадров в верхнем левом углу экрана.
Основной класс — ClassDrawTest
package com.example.jochum.classdrawtest;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.SurfaceView;
public class ClassDrawTest extends Activity {
GameView gameView;
long fps;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gameView = new GameView(this);
setContentView(gameView);
} // end of onCreate
class GameView extends SurfaceView implements Runnable {
Update Update = new Update();
Draw Draw = new Draw();
volatile boolean playing = true;
private long timeThisFrame;
public GameView(Context context) {
super(context);
} //end of GameView constructor
@Override
public void run() {
while (playing) {
// Capture the current time in milliseconds in startFrameTime
long startFrameTime = System.currentTimeMillis();
// Update the frame
Update.update();
// Draw the frame
Draw.draw();
// Calculate the fps this frame
// We can then use the result to
// time animations and more.
timeThisFrame = System.currentTimeMillis() - startFrameTime;
if (timeThisFrame > 0) {
fps = 1000 / timeThisFrame;
} // end of if (timeThisFrame)
}// end of while (playing) loop
} // end of run() method
} // end of GameView Class
//Getters and Setters
public long getFps(){
return fps;
}
} // end of ClassDrawTest Class
Затем класс Draw, частью которого я хочу, чтобы холст был.
package com.example.jochum.classdrawtest;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
public class Draw {
ClassDrawTest ClassDrawTest = new ClassDrawTest();
Canvas canvas;
Paint paint;
SurfaceHolder ourHolder;
public Draw() {
} // end constructor Draw
public void draw() {
// get fps from ClassDrawTest class
long fps = ClassDrawTest.getFps();
// Make sure our drawing surface is valid or we crash
if (ourHolder.getSurface().isValid()) {
// Lock the canvas ready to draw
canvas = ourHolder.lockCanvas();
// Debug code
// Draw the background color
canvas.drawColor(Color.argb(255, 26, 128, 182));
paint.setColor(Color.argb(255, 249, 129, 0));
paint.setTextSize(45);
// Display the current fps on the screen
canvas.drawText("FPS:" + fps, 20, 40, paint);
ourHolder.unlockCanvasAndPost(canvas);
} //end if ourHolder
} //end method draw
} //end class Draw
Файл манифеста устанавливает альбомную ориентацию
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
android:screenOrientation="landscape">
Подробнее здесь: https://stackoverflow.com/questions/412 ... in-a-class
Холст студии Android в классе ⇐ Android
Форум для тех, кто программирует под Android
1772906226
Anonymous
Я работаю над игрой для Android в Android Studio. Но я новичок в Java и Android Studio и хочу очистить код, создав классы для логических частей игры. Моя цель на последние пару дней — заставить класс Draw выполнять всю работу по рисованию экрана, которая будет состоять из манипуляций с растровыми изображениями и операторов drawText.
Однако я даже не могу инициализировать свой Canvas. Я испробовал всевозможные решения, упомянутые в других вопросах на этом сайте, но ни одно из них не связано с настройкой Canvas в классе. Чутье подсказывает, что мне что-то не хватает в конструкторе Draw, но я не могу это понять.
На данный момент код компилируется нормально, но при запуске появляется просто черный экран. Тест предназначен только для отображения частоты кадров в верхнем левом углу экрана.
Основной класс — ClassDrawTest
package com.example.jochum.classdrawtest;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.SurfaceView;
public class ClassDrawTest extends Activity {
GameView gameView;
long fps;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gameView = new GameView(this);
setContentView(gameView);
} // end of onCreate
class GameView extends SurfaceView implements Runnable {
Update Update = new Update();
Draw Draw = new Draw();
volatile boolean playing = true;
private long timeThisFrame;
public GameView(Context context) {
super(context);
} //end of GameView constructor
@Override
public void run() {
while (playing) {
// Capture the current time in milliseconds in startFrameTime
long startFrameTime = System.currentTimeMillis();
// Update the frame
Update.update();
// Draw the frame
Draw.draw();
// Calculate the fps this frame
// We can then use the result to
// time animations and more.
timeThisFrame = System.currentTimeMillis() - startFrameTime;
if (timeThisFrame > 0) {
fps = 1000 / timeThisFrame;
} // end of if (timeThisFrame)
}// end of while (playing) loop
} // end of run() method
} // end of GameView Class
//Getters and Setters
public long getFps(){
return fps;
}
} // end of ClassDrawTest Class
Затем класс Draw, частью которого я хочу, чтобы холст был.
package com.example.jochum.classdrawtest;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
public class Draw {
ClassDrawTest ClassDrawTest = new ClassDrawTest();
Canvas canvas;
Paint paint;
SurfaceHolder ourHolder;
public Draw() {
} // end constructor Draw
public void draw() {
// get fps from ClassDrawTest class
long fps = ClassDrawTest.getFps();
// Make sure our drawing surface is valid or we crash
if (ourHolder.getSurface().isValid()) {
// Lock the canvas ready to draw
canvas = ourHolder.lockCanvas();
// Debug code
// Draw the background color
canvas.drawColor(Color.argb(255, 26, 128, 182));
paint.setColor(Color.argb(255, 249, 129, 0));
paint.setTextSize(45);
// Display the current fps on the screen
canvas.drawText("FPS:" + fps, 20, 40, paint);
ourHolder.unlockCanvasAndPost(canvas);
} //end if ourHolder
} //end method draw
} //end class Draw
Файл манифеста устанавливает альбомную ориентацию
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
android:screenOrientation="landscape">
Подробнее здесь: [url]https://stackoverflow.com/questions/41254850/android-studio-canvas-in-a-class[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия