Difference between revisions of "Tutorial:Cameras (简体中文)"

m
 
(One intermediate revision by the same user not shown)
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}}
 
{{#set:Description=一个使用摄像头的教程.}}
 
{{#set:Description=一个使用摄像头的教程.}}
{{i18n|Tutorial:A Guide to Getting Started with Love2D}}
+
{{i18n|Tutorial:Cameras}}
  
 
[[Category:Tutorials (简体中文)]]
 
[[Category:Tutorials (简体中文)]]

Latest revision as of 07:51, 8 December 2013

BlackBulletIV写了个"Cameras in Love2D"教程,分成了三块,你可以在下面点击相应链接。也可以看我的在此页的翻译。

原链接:

第一部分:基础篇|创建摄像头的基本原理

我们将用到这些函数

这是作者的原解释符号图.

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模块的核心函数是setunsetset可以简单的创建变换,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