パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

monoとgoに手を出す

2017-03-18 | コンピュータ
プチコンBIGで作成した世界地図をprocessingで作ってみるとかなりはやくなる。
pythonに移植してみるとおそーくなる。それでもpythonでguiソフトが思ったより簡単に作れたので

c#で作るとどうなるだろうかとMonodevelopに手を出してどうにも良い参考サイトが見つからなくてさっぱり
ツールで画面にボタンとかの配置ができないありさまで一時撤収

それならばgoはどうだろうかとやってみる。
gitを入れないといけないらしい。いまさらながら登録からやってみる。
いろいろなgui用のライブラリがあってどれをつかったらよいのやら…いろいろ試行錯誤してとりあえずgo-sdl2というのをつかってみることにした。

export GOPATH="$HOME/go"
でgopathを設定して
go-sdl2というのを入れてその中にあるexamplesのソースをかたっぱしから
go build xxx.goでコンパイル
importエラーの起こるライブラリをgo get xxxxを取得してリコンパイルして実行ファイルができる。

いろいろなサイトをみて試行錯誤しまくったので正しい手順をふんでいる自信はまったくなし。


GUI画面にpngを2枚貼っただけexamplesのソースを見様見真似で加工してみただけでまだgo言語については何も知らない。

world.go
package main

import (
    "fmt"
    "github.com/veandco/go-sdl2/sdl"
    "github.com/veandco/go-sdl2/sdl_image"
    "os"
)

var winTitle string = "Go-SDL2 Texture"
var winWidth, winHeight int = 1400,700
var imageName string = "./world.png"
var imageName2 string = "./hi.png"

func run() int {
    var window *sdl.Window
    var renderer *sdl.Renderer
    var texture *sdl.Texture
    var texture2 *sdl.Texture
    var src, dst sdl.Rect
    var src2, dst2 sdl.Rect
    var err error

    window, err = sdl.CreateWindow(winTitle, sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED,
        winWidth, winHeight, sdl.WINDOW_SHOWN)
    if err != nil {
        fmt.Fprintf(os.Stderr, "Failed to create window: %s\n", err)
        return 1
    }
    defer window.Destroy()

    renderer, err = sdl.CreateRenderer(window, -1, sdl.RENDERER_ACCELERATED)
    if err != nil {
        fmt.Fprintf(os.Stderr, "Failed to create renderer: %s\n", err)
        return 2
    }
    defer renderer.Destroy()

    image, err := img.Load(imageName)
    if err != nil {
        fmt.Fprintf(os.Stderr, "Failed to load PNG: %s\n", err)
        return 3
    }
    defer image.Free()

    image2, err := img.Load(imageName2)
    if err != nil {
        fmt.Fprintf(os.Stderr, "Failed to load PNG2: %s\n", err)
        return 4
    }
    defer image2.Free()

    texture, err = renderer.CreateTextureFromSurface(image)
    if err != nil {
        fmt.Fprintf(os.Stderr, "Failed to create texture: %s\n", err)
        return 5
    }
    defer texture.Destroy()

    texture2, err = renderer.CreateTextureFromSurface(image2)
    if err != nil {
        fmt.Fprintf(os.Stderr, "Failed to create texture2: %s\n", err)
        return 6
    }
    defer texture2.Destroy()


    src = sdl.Rect{0, 0, 373, 186}
    dst = sdl.Rect{100, 50, 373, 186}
    src2 = sdl.Rect{0, 0, 421, 74}
    dst2 = sdl.Rect{800, 50, 421, 74}

    renderer.Clear()
    renderer.SetDrawColor(255, 0, 0, 255)
    renderer.FillRect(&sdl.Rect{0, 0, int32(winWidth), int32(winHeight)})
    renderer.Copy(texture, &src, &dst)
    renderer.Copy(texture2, &src2, &dst2)
    renderer.Present()

    sdl.Delay(2000)

    return 0
}

func main() {
    os.Exit(run())
}


利用画像
world.png


hi.png プログラムに合わせて一部加工しています。

画像引用元 国土地理院 地球地図全球版
画像のCopyright. Geospatial Information Authority of Japan. ALL RIGHTS RESERVED.



最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。