Холст студии Android в классеAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Холст студии Android в классе

Сообщение 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">










Подробнее здесь: https://stackoverflow.com/questions/412 ... in-a-class
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»