pygame.error: видеосистема не инициализирована (pycharm)

попробуйте этот пользовательский Drawable:

class ProgressDrawable extends Drawable {
    private static final int NUM_RECTS = 10;
    Paint mPaint = new Paint();

    @Override
    protected boolean onLevelChange(int level) {
        invalidateSelf();
        return true;
    }

    @Override
    public void draw(Canvas canvas) {
        int level = getLevel();
        Rect b = getBounds();
        float width = b.width();
        for (int i = 0; i < NUM_RECTS; i++) {
            float left = width * i / NUM_RECTS;
            float right = left + 0.9f * width / NUM_RECTS;
            mPaint.setColor((i + 1) * 10000 / NUM_RECTS <= level? 0xff888888 : 0xffbbbbbb);
            canvas.drawRect(left, b.top, right, b.bottom, mPaint);
        }
    }

    @Override
    public void setAlpha(int alpha) {
    }

    @Override
    public void setColorFilter(ColorFilter cf) {
    }

    @Override
    public int getOpacity() {
        return PixelFormat.TRANSLUCENT;
    }
}

и проверите его со следующим в onCreate:

LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);

final ProgressBar pb = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal);
Drawable d = new ProgressDrawable();
pb.setProgressDrawable(d);
pb.setPadding(20, 20, 20, 0);
ll.addView(pb);

OnSeekBarChangeListener l = new OnSeekBarChangeListener() {
    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
    }

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        int newProgress = pb.getMax() * progress / seekBar.getMax();
        Log.d(TAG, "onProgressChanged " + newProgress);
        pb.setProgress(newProgress);
    }
};

int[] maxs = {4, 10, 60, 110};
for (int i = 0; i < maxs.length; i++) {
    SeekBar sb = new SeekBar(this);
    sb.setMax(maxs[i]);
    sb.setOnSeekBarChangeListener(l);
    sb.setPadding(20, 20, 20, 0);
    ll.addView(sb);
}

setContentView(ll);
1
задан Rabbid76 5 March 2019 в 18:19
поделиться

1 ответ

Вы дважды инициализировали окно pygame.display.set_mode() . Удалите инициализацию глобального окна, но сохраните и используйте окно, установленное для атрибута .screen класса game.
Метод handle должен выполнять только цикл обработки событий, но метод gameloo должен содержать основной цикл. Внутри основного цикла события должны обрабатываться self.handle():

screen = pygame.display.set_mode(resolution)

class game():
    def __init__(self):
        self.screen = pygame.display.set_mode(resolution)
        self.clock = pygame.time.Clock()
        self.gameobjct = []
        self.gameobjct.append(Ball())
        self.gameobjct.append(Ball(100))

    def handle(self):
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()

    def gameloo(self):
        while True:
            self.handle()
            for gameobj in self.gameobjct:
                gameobj.update()
            self.screen.fill(green)
            for gameobj in self.gameobjct:
                gameobj.draw(self.screen)
            pygame.display.flip()
            self.clock.tick(60)

game().gameloo()
0
ответ дан Rabbid76 5 March 2019 в 18:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: