Difference between revisions of "Tutorial:Cameras (简体中文)"
m (→The camera Module) |
|||
Line 6: | Line 6: | ||
* [http://nova-fusion.com/2011/05/09/cameras-in-love2d-part-3-movement-bounds/ Part 3: Movement Bounds] | * [http://nova-fusion.com/2011/05/09/cameras-in-love2d-part-3-movement-bounds/ Part 3: Movement Bounds] | ||
− | + | =第一部分:基础篇|创建摄像头的基本原理= | |
我们将用到这些函数 | 我们将用到这些函数 | ||
*[[love.graphics.pop (简体中文)]] | *[[love.graphics.pop (简体中文)]] | ||
Line 43: | Line 43: | ||
另外后面紧跟着的3个函数也要看懂了.用上叙同样的方法. | 另外后面紧跟着的3个函数也要看懂了.用上叙同样的方法. | ||
− | =The camera Module= | + | ==The camera Module== |
摄像机的模块具体是这样的. | 摄像机的模块具体是这样的. | ||
Line 92: | Line 92: | ||
− | + | '''camera'''模块的核心函数是''set''和''unset'',''set''可以简单的创建变换,''unset''移除最后一个变换(相当于pop) | |
+ | |||
+ | 我们可以在LOVE中这样写就可以用'''camera'''了. | ||
+ | <source lang="lua"> | ||
+ | function love.draw() | ||
+ | camera:set() | ||
+ | -- draw stuff | ||
+ | camera:unset() | ||
+ | end | ||
+ | </source> | ||
+ | |||
+ | 这是2条改变'''camera'''的语句 | ||
+ | <source lang="lua"> | ||
+ | camera.x = 50 | ||
+ | camera:scale(3) -- 放大3倍 | ||
+ | </source> | ||
+ | |||
+ | ==The Mouse== | ||
+ | 如果在游戏中需要和鼠标互动的话,可以加上这玩意 | ||
+ | <source lang="lua"> | ||
+ | function camera:mousePosition() | ||
+ | return love.mouse.getX() * self.scaleX + self.x, love.mouse.getY() * self.scaleY + self.y | ||
+ | end | ||
+ | </source> | ||
{{#set:LOVE Version=0.7}} | {{#set:LOVE Version=0.7}} |
Latest revision as of 07:51, 8 December 2013
BlackBulletIV写了个"Cameras in Love2D"教程,分成了三块,你可以在下面点击相应链接。也可以看我的在此页的翻译。
原链接:
第一部分:基础篇|创建摄像头的基本原理
我们将用到这些函数
- love.graphics.pop (简体中文)
- love.graphics.push (简体中文)
- love.graphics.translate (简体中文) -- 坐标转换
- love.graphics.rotate (简体中文) -- rotate旋转
- love.graphics.scale (简体中文) -- scale比例
这是作者的原解释符号图.
Starting:
|-----------|
| Default |
|-----------|
love.graphics.push:
|-----------|
| Default | ^ pushed up
|-----------|
|-----------|
| New | <- pushed under
|-----------|
love.graphics.pop:
|-----------| |-----------|
| Default | | New | -> discarded
|-----------| |-----------|
看不明白? 我开始也看不懂,不过看看这2函数个解释你就懂了.
也许看了解释你也不会懂,你要是把例程在LOVE上运行再读一遍代码,一切的一切就迎刃而解了.
另外后面紧跟着的3个函数也要看懂了.用上叙同样的方法.
The camera Module
摄像机的模块具体是这样的.
camera = {}
camera.x = 0
camera.y = 0
camera.scaleX = 1 --scale比例
camera.scaleY = 1
camera.rotation = 0 --rotation旋转
function camera:set()
love.graphics.push()
love.graphics.rotate(-self.rotation)
love.graphics.scale(1 / self.scaleX, 1 / self.scaleY)
love.graphics.translate(-self.x, -self.y)
end
function camera:unset()
love.graphics.pop()
end
function camera:move(dx, dy)
self.x = self.x + (dx or 0)
self.y = self.y + (dy or 0)
end
function camera:rotate(dr)
self.rotation = self.rotation + dr
end
function camera:scale(sx, sy)
sx = sx or 1
self.scaleX = self.scaleX * sx
self.scaleY = self.scaleY * (sy or sx)
end
function camera:setPosition(x, y)
self.x = x or self.x
self.y = y or self.y
end
function camera:setScale(sx, sy)
self.scaleX = sx or self.scaleX
self.scaleY = sy or self.scaleY
end
camera模块的核心函数是set和unset,set可以简单的创建变换,unset移除最后一个变换(相当于pop)
我们可以在LOVE中这样写就可以用camera了.
function love.draw()
camera:set()
-- draw stuff
camera:unset()
end
这是2条改变camera的语句
camera.x = 50
camera:scale(3) -- 放大3倍
The Mouse
如果在游戏中需要和鼠标互动的话,可以加上这玩意
function camera:mousePosition()
return love.mouse.getX() * self.scaleX + self.x, love.mouse.getY() * self.scaleY + self.y
end
Dansk –
Deutsch –
English –
Español –
Français –
Indonesia –
Italiano –
Lietuviškai –
Magyar –
Nederlands –
Polski –
Português –
Română –
Slovenský –
Suomi –
Svenska –
Türkçe –
Česky –
Ελληνικά –
Български –
Русский –
Српски –
Українська –
עברית –
ไทย –
日本語 –
正體中文 –
简体中文 –
Tiếng Việt –
한국어
More info