SnakeGo : Scaling Screen and Moving Camera
敲了幾晚SnakeGo, 原型出來了, 大家來看看不...
不錯, 這貨就是---貪吃蛇...哈哈...別急, 這還是原型, 好玩的在后面呢...(以我敲字速度, 大約再等不到六個月應該可以完成了...)
今天這里記錄下使用LIBGDX過程中碰到的兩個問題:
1. 調整屏幕比例;
2. 移動觀察鏡頭;
一, 調整屏幕比例
LIBGDX是跨平臺的, 一大好處就是直接在PC上測試, 那是非常的方便, 但這有兩個問題需要考慮, 一, 手機是1280x768, 但我PC只有1280x1024的, 而且真要開個跟手機一樣大小的一樣大小的屏幕, 那還怎么看log輸出呢? 二就是不同的手機有著不同的分辨率, 長寬比也不一致, 那怎么保證圖形不變形呢?
這個問題不難解決, 只需要在屏幕尺寸發生變化時, 即resize()(第一次啟動也會調用此函數)中, 重新調整鏡頭(Camera)的參數即可. 如下代碼:
@Override public void resize(int width, int height) { Vector2 size = Scaling.fit.apply(WIDTH, HEIGHT, width, height); camera = new OrthographicCamera(size.x, size.y); camera.update(); batch.setProjectionMatrix(camera.combined); int viewportX = (int)(width - size.x) / 2; int viewportY = (int)(height - size.y) / 2; int viewportWidth = (int)size.x; int viewportHeight = (int)size.y; Gdx.gl.glViewport(viewportX, viewportY, viewportWidth, viewportHeight); super.resize(width, height); }
這里采用的是重新創建camera實例的方式, 另外用改變已有camera實例的參數方式也是一樣的. 很簡單, 而且這樣一次就解決了上面兩個問題 -- PC機上使用任何尺寸的窗口, 都可以獲得跟設置等比例的窗口, 手機上亦是如此. 像I;P就是采用的這種方式來保持其在任意手機上都是1280:768的比例.
這種方法只是改變了'視圖'的大小, 但并不會改變其中的圖形的大小, 這樣為了保持圖形顯示比例, 需要在輸出圖形時做相應的比例放縮. 可以在resize()獲得這個比例, 染在圖形輸出時使用這個比例.
screenScaling = new Vector2((size.x / WIDTH), (size.y / HEIGHT));
... ... batch.draw(img, (- WIDTH / 2) * screenScaling.x, (- HEIGHT / 2) * screenScaling.y, WIDTH * screenScaling.x, HEIGHT * screenScaling.y);
二, 移動觀察鏡頭
在SnakeGo中, 為了不讓Snake'跑出'屏幕, 需要鏡頭camera跟Snake本身保持'同步'移動, 這樣看起來Snake保持在屏幕的中間, 但其它Object是移動的. 根據'相對運行'原理, 使整個看起來像是Snake在Object中穿行. 所以, 移動camaera是必須的, 代碼也簡單, 如下:
...
final OrthographicCamera camera = game.getCamera();
camera.translate(0.0f, 32.0f, 0.0f);
camera.update();
game.getSpriteBatch().setProjectionMatrix(camera.combined);
...
<----心煩意亂的分割線---->
這幾天在找工作, 前面去面了一次, 其中沒一個App或者Game的問題, 倒全是C++相關的, 登時就傻眼了...雖說咱也是C++'出身'的(不然Blog也不會在這里不是), 但也許真的是'老'了, 才三年不用C++,竟然忘記的只剩下個auto_ptr了...更悲劇的是咱用的C++98標準已經變成C++11了, auto_ptr變成smart_ptr了...
都說現在是個'跨界'的時代, 但咱這還沒有跨界, 只是同行轉個方向而已, 為啥就這么悲劇了...好吧, 估計學藝不精才是根本...
同學"'大數據'的博士"周五來電, 問我要不要跟她一起做個'圖像搜索', 有些猶豫, 要說三年前, 也許就干了, 但現在...再轉次嘛...
恰逢I;P敲完, 心煩意亂的一周, 只好趕緊抓起SnakeGo來, 夜夜瘋敲, 來安撫砰砰躁動的心...是的, 至少敲字可以讓自己平靜些...
吐槽而已, 這里想說 ---- 程序員們啊, 轉行要趁著年輕趕緊啊...
posted on 2014-05-18 19:24 codejie 閱讀(2079) 評論(2) 編輯 收藏 引用 所屬分類: 隨筆而已 、心情痕跡 、SnakeGo