Kivy指南

前言

移动应用开发几年前就是热点了,现在是个软件用户就想要移动版。桌面操作系统也受到影响,跨平台的软件成为新常态。甚至通常局限于微软桌面操作系统的游戏开发者也开始找一些Mac和Linux平台上的工作了(比如Steam,目前有Mac游戏近4000个,SteamOS+Linux游戏2000多个)。

这对新手和个人开发者是大利好:跨平台的支持可以增加用户,销售量自然会更好。

但是,写可移植的软件是非常耗费资源的过程,对小公司和个人开发者的影响比大公司更甚。

尤其是许多平台都有不同语言的SDK:iOS用Objective-C和Swift,Android用Java,MS用.Net,更多是C#来开发软件。

使用这些工具可以通过系统功能来制作相应的原生应用,但是跨平台的代码重用变得十分困难。就算你精通所有语言和相关的操作,代码的移植仍然是一件复杂的事情。

一次编写,到处运行

因此,统一多平台支持开发工具呼之欲出。无独有偶,1995年的Sun公司就为解决类似问题发明了Java。其口号为“Write once, run anywhere”(一次编写,到处运行,WORA),虽然Java已经20年了,很多人都在各种纪念。但是其啰嗦的代码仍然没能实现当年的豪言壮语,一些程序员的改编版本更能表达人们的感受——“write once, run away”(一次编写,到处跑偏),有一些放弃Java转向了更好的程序语言,比如Python。

本书主题Kivy是一个图形用户界面(graphical user interface,GUI)工具用来轻松创建跨平台的Python应用。其主要特征如下:

  • 兼容性:Kivy支持多平台,包括Windows,MacOS,Linux,Android和iOS,均出自一个工具
  • 原生界面:Kivy填补了不同输入方式间的缝隙,允许你用相同的代码处理不同的输入方式,包括鼠标和触摸屏
  • 快速图形硬件加速:OpenGL渲染让Kivy可以胜任图形需求高的应用,如视频游戏,还可以通过平滑变换改善用户体验
  • 使用Python开发:Kivy的app是用Python写的,轻松简单,可移植性良好,Python的标准库和PyPI第三方丰富模块都可以使用

Kivy可以看作许多模块的超集:许多知名的模块如Pygame,SDL,GStreamer都是Kivy的组成部分。但是,Kivy的API更加高级、统一,方便使用。

Kivy是开源的,其源代码在GitHub上。你可以fork一下,帮忙打补丁,也可以增加新特性。

本书内容简介

本书分9章。

  • 第1章,时钟app对Kivy应用开发做简要介绍。包括Kivy语言、布局、部件和计时器。本章会做一个时钟app,与手机上的时钟应用类似
  • 第2章,画图app对Kivy框架的部件和功能进一步挖掘。通过制作画图app学习自定义部件,在画布上画任意形状,处理多点触控事件等
  • 第3章,Android录音app是用Kivy开发一个Android应用。通过Pyjnius模块实现Python与Java的交互,调用Android的API来实现Kivy用户界面
  • 第4章,聊天app介绍Kivy的网络应用开发,用Python写一个简单通信协议,利用Twisted框架建立服务器-客户端模型,实现一个Kivy聊天app
  • 第5章,远程桌面app用另一种方式写服务器-客户端应用。这章通过HTTP协议来构建模型。首先建立命令行模式的HTTP服务器,然后再用Kivy实现远程桌面app
  • 第6章,2048 app是实现一个2048游戏。我们将演示Kivy更复杂的功能,用Kivy属性实现数据绑定和触摸手势处理来创建自定义部件
  • 第7章,飞翔的小鸟app是另一个Kivy游戏,实现著名的Flappy Bird游戏。我们会学习纹理坐标的使用,声音效果和碰撞检测等知识
  • 第8章,着色器app介绍Kivy应用中如何GLSL着色器。这一章首先介绍OpenGL原始类型的概念,如索引和顶点,然后写出可以直接在GPU上运行代码,最后实现一个满天星屏保app
  • 第9章,射击app延续上一章的内容,用GLSL着色器做游戏。首先实现一个可重用的粒子系统,然后通过粒子系统构建游戏角色。前面介绍过的许多内容在这个游戏中都会得到体现,如碰撞检测,触摸屏控制,声音效果等