画面にバッファーを描画する際の境界の不一致(golang.org/x/exp/shiny/screen)

killerx:

golang.org/x/exp/shiny/screenを使用してウィンドウを作成し、画面にバッファをペイントしようとしています。

ウィンドウとウィンドウにパブリッシュしているバッファーに同じ境界(高さと幅)を割り当てましたが、結果を見ると不一致のようです。

画像で、ウィンドウにアップロードされた青いバッファが完全に覆っていないことがわかります。

ここに画像の説明を入力してください

package main

import (
    "image"
    "image/color"
    "log"

    "golang.org/x/exp/shiny/driver"
    "golang.org/x/exp/shiny/screen"
    "golang.org/x/mobile/event/key"
    "golang.org/x/mobile/event/lifecycle"
)

const (
    Row = 32
    Col = 64
)

// Colors
var (
    Black = color.RGBA{0, 0, 0, 1.0}
    White = color.RGBA{255, 255, 255, 1.0}
    Blue  = color.RGBA{0, 0, 255, 1.0}
)

func main() {

    go driver.Main(func(s screen.Screen) {
        opts := screen.NewWindowOptions{
            Height: Row,
            Width:  Col,
            Title:  "Chip-8 VM",
        }

        window, err := s.NewWindow(&opts)
        if err != nil {
            log.Print("Unable to create display window: ")
            log.Fatal(err)
            return
        }

        defer window.Release()

        dim := image.Point{Col, Row}
        drawBuff, err := s.NewBuffer(dim)
        if err != nil {
            log.Fatal(err)
        }

        defaultDrawToBuffer(drawBuff.RGBA())

        log.Print("Window bounds: ", opts)
        log.Printf("Buffer bounds: %s", drawBuff.Bounds())
        log.Printf("Buffer size: %s", drawBuff.Size())

        window.Upload(image.Point{}, drawBuff, drawBuff.Bounds())
        window.Publish()

        for {
            e := window.NextEvent()
            switch e := e.(type) {

            case lifecycle.Event:
                if e.To == lifecycle.StageDead {
                    return
                } else if e.To == lifecycle.StageFocused {
                    log.Print("Focus back on the screen!")
                }

            case key.Event:
                log.Print("pressed key: ", e.Code)
                // exit game
                if e.Code == key.CodeEscape {
                    return
                }
            case error:
                log.Print(e)
            }

        }
    })

    for {
    }

}

// Bounds: (0,0)-(64,32)
func defaultDrawToBuffer(img *image.RGBA) {
    b := img.Bounds()

    log.Printf("Bounds: %s", b.String())

    for x := b.Min.X; x < b.Max.X; x++ {
        for y := b.Min.Y; y < b.Max.Y; y++ {
            img.SetRGBA(x, y, Blue)
        }
    }
}
icza:

の初期サイズを指定しますwidth=62, height=32。これらはピクセル単位のサイズです。つまり、ウィンドウを「小さく」する必要があります。通常、Windowsには最小サイズがあり(多くの場合、ウィンドウコントロールによって決定されます)、この最小サイズは、意図したサイズよりも大きいようです。したがって、描画する青い長方形はウィンドウ全体にはなりません(最小サイズより小さくなりません)。

たとえばRows = 300, Cols = 600サイズを大きくすると、ウィンドウがいっぱいになります。

また、をgo呼び出すときキーワードをドロップしますdriver.Main()。一部のOS固有のライブラリでは、それをmainゴルーチンから呼び出す必要があります。だから、空を削除するforからmain()driver.Main()あなたのアプリが終了する必要があるまでブロックします。

また、ウィンドウ(画面)が更新またはクリアされたかのように、再描画が必要になる場合があるため、青い長方形が表示されることは保証されません。

そのため、代わりに描画ロジックをイベントループに移動し、イベントに対して実行しpaint.Eventます。

case paint.Event:
    defaultDrawToBuffer(drawBuff.RGBA())
    window.Upload(image.Point{}, drawBuff, drawBuff.Bounds())
    window.Publish()

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

データフレームにロジックを適用する際の長さの不一致

分類Dev

2つのファイルを比較し、不一致の列とともに不一致の行を書き込みます。不一致の列を指摘することが私の主な問題ステートメントです

分類Dev

あるテーブルから別のテーブルにデータをフェッチする際のデータ型の不一致

分類Dev

Scala2.9から2.13.2にアップグレードする際の型の不一致エラー

分類Dev

データフレームの複数のサブセットの傾きを計算する際の時間の不一致

分類Dev

Cython:バッファタイプの不一致、「int」が必要ですが「long」になりました

分類Dev

javax.crypto.AEADBadTagException:タグの不一致!文字列を暗号化する際にエラー

分類Dev

メモリからexeファイルを実行する際の「パラメータ数の不一致」

分類Dev

Dockerでsklearn.ensembleRandomForestModel(VM上に構築)をロードする際のバージョンの不一致

分類Dev

Dockerでsklearn.ensembleRandomForestModel(VM上に構築)をロードする際のバージョンの不一致

分類Dev

カフェで自分の訓練されたネットからウェイトをコピーする際の形状の不一致

分類Dev

Cassandraの問題を解決する方法「ConfigurationException:列ファミリーIDの不一致」

分類Dev

Googleクラウドストレージ:文字列をGCSにアップロードする際のCRC32CとMD5の不一致

分類Dev

<Excel-VBA>セルからテキストボックスに値をコピーする際の「タイプの不一致」エラー

分類Dev

GPUに移行する際のテンソルタイプの不一致

分類Dev

辞書を反復処理する際の型の不一致

分類Dev

トレイトを実装する際のタイプの不一致

分類Dev

特性を作成する際のScalaタイプの不一致

分類Dev

Spring Boot、QueryDSL、Springfox Swaggerを一緒に使用する-Guavaバージョンの不一致

分類Dev

ピボットキャッシュを設定する際のタイプの不一致

分類Dev

既存のデータベースをEFにマッピングするデータ型の不一致

分類Dev

FloatをIntの不一致に変換する

分類Dev

Firefoxステップの不一致フォームの検証を無視する

分類Dev

一部のCSSスタイリングに背景色を使用する際の不一致

分類Dev

一致および不一致のcasをカバーするawk1-liner

分類Dev

外部キーの不一致-「Chellenge」を参照する「Comment」

分類Dev

形状をループする型の不一致

分類Dev

フォーマット文字列と引数の不一致を検出するgolangコンパイル時間(静的コード分析)

分類Dev

SimpleInjectorでISessionを注入する際のライフスタイルの不一致

Related 関連記事

  1. 1

    データフレームにロジックを適用する際の長さの不一致

  2. 2

    2つのファイルを比較し、不一致の列とともに不一致の行を書き込みます。不一致の列を指摘することが私の主な問題ステートメントです

  3. 3

    あるテーブルから別のテーブルにデータをフェッチする際のデータ型の不一致

  4. 4

    Scala2.9から2.13.2にアップグレードする際の型の不一致エラー

  5. 5

    データフレームの複数のサブセットの傾きを計算する際の時間の不一致

  6. 6

    Cython:バッファタイプの不一致、「int」が必要ですが「long」になりました

  7. 7

    javax.crypto.AEADBadTagException:タグの不一致!文字列を暗号化する際にエラー

  8. 8

    メモリからexeファイルを実行する際の「パラメータ数の不一致」

  9. 9

    Dockerでsklearn.ensembleRandomForestModel(VM上に構築)をロードする際のバージョンの不一致

  10. 10

    Dockerでsklearn.ensembleRandomForestModel(VM上に構築)をロードする際のバージョンの不一致

  11. 11

    カフェで自分の訓練されたネットからウェイトをコピーする際の形状の不一致

  12. 12

    Cassandraの問題を解決する方法「ConfigurationException:列ファミリーIDの不一致」

  13. 13

    Googleクラウドストレージ:文字列をGCSにアップロードする際のCRC32CとMD5の不一致

  14. 14

    <Excel-VBA>セルからテキストボックスに値をコピーする際の「タイプの不一致」エラー

  15. 15

    GPUに移行する際のテンソルタイプの不一致

  16. 16

    辞書を反復処理する際の型の不一致

  17. 17

    トレイトを実装する際のタイプの不一致

  18. 18

    特性を作成する際のScalaタイプの不一致

  19. 19

    Spring Boot、QueryDSL、Springfox Swaggerを一緒に使用する-Guavaバージョンの不一致

  20. 20

    ピボットキャッシュを設定する際のタイプの不一致

  21. 21

    既存のデータベースをEFにマッピングするデータ型の不一致

  22. 22

    FloatをIntの不一致に変換する

  23. 23

    Firefoxステップの不一致フォームの検証を無視する

  24. 24

    一部のCSSスタイリングに背景色を使用する際の不一致

  25. 25

    一致および不一致のcasをカバーするawk1-liner

  26. 26

    外部キーの不一致-「Chellenge」を参照する「Comment」

  27. 27

    形状をループする型の不一致

  28. 28

    フォーマット文字列と引数の不一致を検出するgolangコンパイル時間(静的コード分析)

  29. 29

    SimpleInjectorでISessionを注入する際のライフスタイルの不一致

ホットタグ

アーカイブ