XNA 通过图片播放动画,Windows Phone 游戏开发

本文将介绍如何将正副的图片作为动画显示。

准备图片

我们需要逐帧的绘制你想要的动画效果,下面的一副图片仅仅是一个例子,假定一个角色所占的大小为 50x50。

添加图片

将已经绘制好的图片添加到 Content 项目中。

载入图片

在 Game 类的 LoadContent 方法中,我们使用 Content 的 Load 方法来加载准备好的图片(这个方法还可以载入其它资源)。这里需要设置正确的路径 @”image/test”,test 是图片的资产名称。最后,我们将图片保存在 textImage 字段。

private Texture2D textImage;
protected override void LoadContent ( )
{
// 创建新的 SpriteBatch,可将其用于绘制纹理。
spriteBatch = new SpriteBatch ( GraphicsDevice );

// TODO: 在此处使用 this.Content 加载游戏内容
this.textImage = this.Content.Load<Texture2D> (
@”image/test
);
}

 

更新帧信息

播放动画的原理是绘制图片的不同部分,中间有一定的时间间隔,这样看上去就像角色在动一样。因此,首先需要设置每隔多久更新绘制的区域。

private int frameIndex = 1;
private int frameWait = 30;
protected override void Update ( GameTime gameTime )
{

if ( –this.frameWait == 0 )
{
this.frameWait = 30;

if ( ++this.frameIndex == 3 )
this.frameIndex = 1;

}

base.Update ( gameTime );
}

在上面的代码中,frameIndex 表示当前绘制图片的哪一个部分,以尺寸 50×50 为分隔,frameWait 表示下一次更新 frameIndex 还需要多少帧。每一隔 30 帧大约 1 秒钟,我们在图片的第一部分和第二部分之间切换。

绘制图片

最后,我们在 Game 的 Draw 方法中根据 frameIndex 来绘制图片的一部分就行了。

protected override void Draw ( GameTime gameTime )
{
GraphicsDevice.Clear ( Color.CornflowerBlue );

this.spriteBatch.Begin ( );
this.spriteBatch.Draw (
this.textImage,
Vector2.Zero,
new Rectangle (
50 * ( this.frameIndex – 1 ),
0,
50, 50 ),
Color.White
);
this.spriteBatch.End ( );

base.Draw ( gameTime );
}

上面的代码中,我们在原点绘制了图片,并根据 frameIndex 确定了需要绘制的区域。

 

本文链接

博客园_首页

利用mysql语法更换wordpress主题

利用mysql语法更换wordpress主题
有时候,当我们在尝试一些新的wordpress主题的时候,难免会因为主题跟wordpress版本不兼容的,导致网站后台打不开,前台也无法访问的情况,这个时候,一定会很抓鸡吧?鲜活优惠码最经有一位wordpress新手朋友就遇到了这个问题,下面鲜活优惠码就分享一下利用mysql语法更换wordpress主题的方法吧!
首先登录你的主机。然后phpmyadmin那里执行以下mysql语句即可!:
update wp_options
set option_[......]

阅读全文

鲜活优惠码

使用javascript生成PDF的类库 – jsPDF

使用javascript生成PDF的类库 - jsPDF

在线演示

曾经生成PDF都是服务器端代码的专利,在今天的这篇文章中,我们将介绍一个javascript类库 - jsPDF,使用它能够帮助你使用前端脚本生成PDF文件,是不是很棒,试试吧!

jsPDF支持不同类型的PDF文件格式,包括:文本,数字,图形,图片,同时你可以自由的编辑标题或者其它类型元素。

支持互动的内容制作,例如,你可以输入文字或者数字,然后jsPDF帮助生成最后的PDF内容。

支持现代浏览器,如果是老式浏览器的话,可以很好的使用flash来实现兼容。不过貌似支持Firefox不是很好,如果要查看演示,使用Chrome吧!

来源:使用javascript生成PDF的类库 – jsPDF


前端观察

前端观察开始征稿

最近前端观察更新没那么快了,也有人说文章的质量有所下降,好吧,平时工作太忙以至于积累了很多内容却没有精力把它们写出来,心有余而力不足。。。所以现在开始征稿,欢迎大家分享自己的技术和经验。

把前端观察开放出来的想法已经酝酿了好久好久了,但由于一些原因没有成行,不过之前也陆陆续续有一些同学分享自己的技术,在此深表感谢^ ^

内容要求:

  1. 前端技术类文章
  2. 原创或翻译均可
  3. 有较高的代表性或概括性
  4. HTML5、CSS3等新技术介绍或讲解,或者能代表前端技术的发展趋势的内容

你能得到什么?

  1. 没有稿费
  2. 更多的传播你自己——但请不要刻意营销
  3. 前端观察的google广告收入在支付服务器和域名费用之外还有一点剩余,初步计划定期赠送一些公仔、T恤之类的给各位作者

嗯,四年前,我和糖伴西红柿一手把前端观察办起来,我们深深喜欢web开发,喜欢前端技术,希望能够和大家分享自己的成长,分享优质的前端技术和资源。所以,如果你和我们、和所有前端观察的作者一样,爱前端、爱分享,那么,欢迎你加入前端观察的编辑队伍中来~~

加入方法:页面右下角注册账号,然后联系我们申请作者权限——wordpress的多人管理,貌似不是那么方便~~

有任何问题,也欢迎在评论中提出~~


前端观察

Sublime Text 2 使用配置心得 – notepad++ 略丑


都说漂亮的编辑器能让你的码速增加20%,sublime就是这样一款编辑器。

4年前(我擦勒~ 好久),偶然的机会接触了notepad++, 然后果断抛弃笨重的dreamweaver。notepad++ 的优点不用多介绍,快速,简洁,扩展性强。对于web前端开发,这编辑器基本能够满足。
当然崇尚完美编辑器的大猫会鄙视我不用IDEA。
所以。。。我喜欢快,但我不早泄(话说,我最近写的文章里带这些字眼就能引来一些对应的广告评论:如伟哥~ 好牛逼 =,=)~

1.不仅是漂亮~

之前npp吸引我的重要因素是它轻量,扩展性不错,一些特性用得很爽(如:关键词自动高亮匹配,代码自动完成)
尝试用sublime是因为它相对于npp来说真的漂亮好多。且目前的版本,功能基本上跟npp差不多,甚至细细研究发现有很多好玩的东西^__^

2.眼前一亮概要栏的创新设计

除了外观好看,还有一个原因让我喜欢上sublime是因为有个很酷的概要栏(配图中右侧显示代码缩略图的东东),
当编辑一个大文件时,这个东西不但能帮助快速对应到相应代码区,同时。。这东西就是个炫机神技哇~~ 特别是满屏代码的时候,真是赏心悦目 ╰( ̄▽ ̄)╮
话说最新版的npp 也有这个功能了。

3.主题配色很强大,但仍需改进

像notepad++ 一样 sublime的配色功能很强大,研究了一周,把原先在npp里的主题配色搬到了sublime上(配图就是)。目前我只配了css html 的配色。
说它仍需改进是,配色表是个xml,而且语法对应没有帮助文档,需要去默认配色里查,调试起来不方便,但看着xml文档觉得还是挺强大的。
有朋友想要的话我可以甩你个xml ^__^

4.所有快捷键可自定义

这个功能要比npp要强,因为npp的默认快捷键不太好改(可能不知道怎么改),而且有些插件的快捷键(zen code)会干扰其他软件,让人匪夷所思。
你可以通过Commend palette 菜单(ctrl+shift+ p) 中搜索key 来打开默认default key 文件,和 user key 文件,
default文件里记录了所有的快捷键内容,user里可以写同样的快捷键来覆盖已有的。

5.好用又蛋疼的 Snippets 自动提示功能

sublime 的 Snippets 是一种可以自定义代码补全功能,简单的说就是可以自己做一个代码片段然后存到 user 文件夹(sublime 目录下有个user文件夹)下,
这个时候就可以根据需要简化自己的代码。如:通过定义代码片段,你只要输 clog+TAB 就能输出 console.log(); 文件代码如下:(Tools > new Snippet)就能新建

<snippet>
<content><![CDATA[console.log($  {1});]]></content>
<!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
<tabTrigger>clog</tabTrigger>
<!-- Optional: Set a scope to limit where the snippet will trigger -->
</snippet>

不过为什么说它蛋疼呢? 使用了将近2周才发现 sublime 的代码提示好诡异,就是代码提示竟然都是由Snippets组成的。并且每个文件只能存一个代码片段。并且自带的代码,如css目录下的Snippets 很多都不好用 =,=, 这让人情何以堪哇。

6.扩展性 – 插件 – 自己动手

这个我就不用说了。谁用谁知道,我还在学。

7.缺点 – 项目管理功能缺少

这个可能是目前碰上的唯一的缺点了哇,原先npp可以将几个文件甩到一个project 块里,方便切换,sublime在这方面还很不足。
不知道是不是有插件能做到?谁知道求分享

8.好软件要付费哇~ T__T

不付费? 就得忍受时不时(应该是判断保存次数),弹出个窗口提示你去付费。等完美点就买~ ⊙﹏⊙

您可能还对这些日志感兴趣


浆抱罗斯&飞鱼’s blog

iPhone 5/iOS 6前端开发指南

iPhone 5和iOS 6已经发布好几天了,相信很多童鞋都已经刷上了iOS 6。我们在之前就发表过《iOS 6中Safari对HTML5的支持》,但是除此之外,实际上市的iOS 6具体支持还有哪些新功能?让我们一起看下。

iPhone首先屏幕变长了,分辨率从iPhone 4s的640px*960变成了640*1136,长宽比变成了16:9。DPI依然是326。其它表现看起来是一样的。

检测iPhone 5/iOS 6

检测iOS 6很简单,用ua就可以了:

1
Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25

但是刷了iOS 6的所有iPhone的ua都是这个,那么判断是否是iPhone 5就要用js或者media query的方法了:

js:

1
isPhone4inches = (window.screen.height==568);

CSS:

1
2
3
@media (device-height: 568px) and (-webkit-min-device-pixel-ratio: 2) {
/* iPhone 5 or iPod Touch 5th generation */
}

主屏幕web app

如果你之前通过apple-mobile-web-app-capable这个meta标签来将网页添加到主屏幕的话,这种方法只支持iPhone 的3.5″屏幕,而iPhone 5会比较悲催。

meta标签:

1
<meta name="apple-mobile-web-app-capable" content="yes">

iPhone 5下的表现:

即便你提供了一个大尺寸的启动界面(640*1096),iPhone 5依然会将其压缩至640*920。

解决方案:

你需要放弃之前使用的viewport属性width=device-width或者width=320。如果你不指定viewport,它也可以很正常的显示:

1
<meta name="viewport" content="initial-scale=1.0">

或者你也可以指定一个非320的宽度:

1
<meta name="viewport" content="width=320.1">

如果你不想影响iPhone 4s以前的safari,也可以用js动态设置viewport:

1
2
3
if (window.screen.height==568) { // iPhone 4"
document.querySelector("meta[name=viewport]").content="width=320.1";
}

对于启动画面,可以用media query来调整:

1
2
<link href="startup-568h.png" rel="apple-touch-startup-image" media="(device-height: 568px)">
<link href="startup.png" rel="apple-touch-startup-image" sizes="640x920" media="(device-height: 480px)">

主屏webapp默认标题:

可以通过meta标签来给主屏webapp指定标题:

1
<meta name="apple-mobile-web-app-title" content="前端观察">

HTML5支持:

file api:

现在可以简单的支持文件上传了,同时也支持多文件上传:

1
2
<input type="file"><!--单文件-->
<input type="file" multiple> <!--多文件-->

但是,由于iOS的资源管理机制的限制,你只能上传照片和视频,不能上传其它格式文件,也不支持getUserMedia api(camera api)。

Audio api

这个不解释了。

smart app banner

如果你的网站同时提供的有app在itunes app store,可以通过一个简单的meta标签来提示用户,让用户下载安装你的native app(或者是hybrid app):

1
<meta name="apple-itunes-app" content="app-id=9999999">

也支持itunes affiliate program(推广联盟):

1
2
<meta name="apple-itunes-app" content="app-id=9999999, app-argument=xxxxxx">
<meta name="apple-itunes-app" content="app-id=9999999, app-argument=xxxxxx, affiliate-data=partnerId=99&siteID=XXXX">

需要注意的是,app banner占位为156px的高度——高分屏为312px。

CSS3 Filter

这个不解释了,不清楚的请阅读《-webkit-filter是神马?》。

Safari 全屏

这个很赞,有些像 mac os x 的全屏方法,但是只支持横屏的场景。

点击右下角的icon即可全屏:

animation timing api

这个对游戏开发者非常有用,详情可访问Animation Timing API,也可以看下Paul Irish的这个教程

CSS image set

这个很赞,就是你可以为css 选择器指定多个特定的图片,用于区分高分屏和非高分屏:

1
-webkit-image-set(url(low.png) 1x, url(hi.jpg) 2x)

可以支持background-image之类的属性。

这个是webkit私有属性,其它浏览器不支持。希望os x下也开始支持吧,这样就不用 background-size来区分视网膜屏了。

CSS 3 cross-fade

iOS 6支持一些最新的CSS3 image values标准,包括cross-fade。这样我们可以在同一个选择器上使用多张图片,以实现半透明或者动画的效果:

1
background-image: -webkit-cross-fade(url("logo1.png"), url("logo2.png"), 50%);

Web View更新:

需要注意的是,webview中的javascript速度,比nitro引擎的Safari慢3.3倍。

嗯,上面说的hybrid模式就是用webview组件封装的webapp,phonegap之类的第三方开发工具既是这种模式。

同步调试:

iOS 6中Safari和webview,支持用桌面Safari同步调试了。

方法很简单:

  1. 手机上设置Safari开启 web inspector(设置–>safari–>高级)
  2. 手机连上电脑
  3. 打开电脑上的Safari,然后菜单–》开发,即可看到设备。点击即可调试。

然后你就可以看到safari 6的调试器:

总结

这个版本的iOS中的safari提升还是很多的,特别是同步调试功能,终于可以像在pc上一样调试webapp或者hybrid app了,给我们开发者提供了很大的方便。

PS:前几天在做某项目的wap版——虽然和iOS没太大关系——然后各个手机自带的wap 1.0和wap 2.0浏览器都正常了,没大问题了,结果发现国产的两大巨头QQ手机浏览器和UC浏览器却在android的某个型号下有各种小问题,关键是,它们调试起来相当麻烦。于是我们就yy,这些第三方手机浏览器一般都是双核的,webkit内核下是没问题的,有问题的是“自主研发”的内核,那么,这些浏览器厂商是否可以像safari这样,提供一个meta属性,让开发者来指定用哪个内核来渲染?

整理自:iPhone 5 and iOS 6 for HTML5 developers


前端观察

又是一个月的总结

     开学已经一个月了,离上一次总结的时间又已经有两个月之久了。这一次总结得晚倒并不是因为自己无话可说,反而是因为有太多要说的而时间却又不充裕,没有真正能够静下心来总结的时间。

明天就是中秋了,放假,今天忙完了一个小项目,抽出一点时间来放松一下,看了个电影,春丽传,还剩半个小时的时间,于是乎就把最近所思所想记下来吧。

      

  先按时间总结一下最近在做的东西吧。

工作篇

        开学第一周:Android应用,为了一个齐鲁软件大赛的项目,和两个计算机学院的同学一起报的,可是真正写代码的却是我这个非科班学机械的。暑假做了一点这个东西,但是九月份要交,于是就边学边写了,图书馆借了两本JAVA的书,阿姆斯特朗亚特兰州立大学Liang的基础篇和进阶篇,对照着园子里吴秦写的Android介绍看了一下Android的大体架构,了解了一下Android应用的构建方法,当然都只是最为浅显的东西,自己也从来没有指望能够通过一个周的学习就真正把Java弄通,把Android学会,没有实际项目的历练,没有足够的经验积累,所谓的学会也就只是能写出可以运行的代码而已,学会了一些简单的语法罢了。不过学习Java的过程却是对自己思考问题的方式产生了很大的影响,一些设计模式和一些由类组织的数据结构在这两本书里面介绍的都很详细,仔细看了一下集合框架和多线程,对类组织的数据结构也了解了不少。通过这两本书,却是受益匪浅。Android应用最终做出来了,同样的,也不是很完善,只不过是简单的客户端发送查询请求服务器端发布JSON结果再由客户端解析显示而已,整个应用干的都是这种事情,没有权限控制没有登陆整合等等。学习了一下MQTT消息推送,也挺好玩的,但是只是用的别人的解决方案,自己还是不是很明白原理,看了IBM的一篇文章也没彻底弄这个机制。

        

        第二周:第二周又接下一个跟进式指导的活,PHP的,一直在做着,直到现在也没有弄完,感觉前台的东西很闹心,前后台一起做却是有点吃力,又因为那么忙,既要兼顾本专业的学习(其实本专业的兼顾是失败的,自己的自制力还是太差了,当有bug需要解决或者有思路需要继续写下去的时候,总是忍不住去想,忍不住去做,甚至逃课,发现自己越来越不听话了,不再是从前的那个好孩子了,不过这也许是年轻时的放纵,做点自己喜欢的事,即使是错的,但也不让自己的青春留下太多的后悔)

        

        第三周:第三周继续做暑假做的一个威客系统,后台基于CI框架,前台Bootstrap,这个组合自己以前也用过,但是对CI的认识还是不够彻底,虽然会用hook会写自己的MY_Controller也学会了常用的东西构建进自己的library和helper中,但是对业务上各个模块的划分,各个模型的通信与模块的解耦还是把握的不够,不能做到最大程度的灵活性,依然是为了MVC而MVC,只是因为用框架要遵循MVC的模式才三层分离,而实际上并没有真正做好模型的重用,对于模型层和控制器层的各个变量方法的命名什么的也都非常不规范,想到哪用到哪,风格也不统一,这也许就是自己修炼的问题了,需要重构,在重构中成长,学习优秀的代码,学习优秀的设计,学习优秀的命名方式与模块划分方法,在写的过程中体会自己的弱点并不断改进,这也许就是所谓的“自己的修炼没有到一定的程度,业务还没有复杂到一定程度,是不会体会到OO的好处”那句话的含义了吧,貌似是aiyooyoo说的,自己初学PHP的时候《PHP白菜手册》却是帮了自己不少的忙,在此感谢此小册子的作者猪也知道,一个非科班的女程序员。

 

        第四周:继续做了那个威客系统,做那个学前教育的网站,做那个跟进式指导的活,前两个基本已经完工了,就剩下部署和小范围的改进了。今天大体搞完了威客系统,故而能抽出时间来做总结。

 

按时间总结完了,就按学习来总结一下学的东西吧。

学习篇

 

PHP

《PHP设计模式》看了一部分,在这本书上学到的倒不是设计模式,而是写测试,现在也开始慢慢学着写测试了,虽然很多时候还是写一个TestController自己来手动测试代码来看结果,不过已经有了测试的思维,不断改进吧。做的三个站都是PHP的,两个是基于CI的,一个是织梦二次开发的,虽然很多时候看一些评论说做织梦就是做垃圾站,但是不可否认,织梦帮了自己不小的忙,省去了很多自己重复造轮子的东西,而且模型的控制也很灵活,虽然自己写起代码来还是面向过程,只是做了控制和视图的分离,不过也算对二次开发的东西有了了解,也算是学习了一下这些稍微大一点的CMS的设计思维了。做基于CI的东西主要学习了model的划分与模块的命名,对OO有了更深一点的了解,也指明了自己以后的学习方向,有时候知道自己缺少什么自己要学习什么比学习得快更重要,自知之明才是为人为学之本。

Java

看了armstrong的那两本教科书,不错,正如在工作篇中总结的那样,复习了一下数据结构,至少对线性表和树有了更清晰的感觉。简单的Android应用也能写一写了,也很高兴。虽然多学一门语言需要多花点时间,但是感觉值得,因为这并不是在瞎折腾,虽然学到的也只是皮毛,但并不是在浮躁地浪费时间。

本专业学习:却是没有好好学,上理论力学总走神,不好好学,需要格外注意,不能拿这些做理由让自己不再去学习本专业的课程。

下一步:

      暂时是继续写代码,在写的过程中成长,在github上fork点项目坐一下,有时间再看一下数据库相关的东西,学习一下数据库的架构,对自己思维的锻炼也是很有帮助的。还有,要借一本理论力学的书,把落下的东西补上来,要不然国庆回来以后可能真的听不懂到了考试的时候又要靠突击靠助攻了。

本文链接

博客园_首页

【java多线程与并发库】—传统java多线程 线程创建方式

一、Thread类的构造方法

public Thread();

public Thread (Runnable target);

public Thread (Runnable target,String name);

public Thread (String name);

public Thread (ThreadGroup group,Runnable target);

public Thread (ThreadGroup group,Runnable target,String name);

public Thread (ThreadGroup group,String name);

 

二、Java中提供了2种创建线程的方法:

 
 
(1)   继承Thread类(java.lang.Thread)
 
public class Thread extends Object implements Runnable

 

这种方法是将类声明为Thread的子类。该子类应重写Thread类的run方法。接下来可以分配并启动该子类的实例。

 

 实例一:

  1. public class ThreadTest02 extends Thread{  
  2.   
  3.     public void run(){  
  4.         for(int i=0; i<10; i++){  
  5.             System.out.println(“线程”+Thread.currentThread().getName()+“extends Thread is running…”+i);  
  6.         }  
  7.         System.out.println(“线程”+Thread.currentThread().getName()+“执行结束,退出!”);  
  8.     }  
  9.   
  10.     public static void main(String[] args) {  
  11.         // TODO Auto-generated method stub  
  12.         Thread t1 = new ThreadTest02();  
  13.         t1.setName(“T1″);  
  14.         Thread t2 = new ThreadTest02();  
  15.         t2.setName(“T2″);  
  16.         t1.start();  
  17.         t2.start();  
  18.     }  
  19.   
  20. }  

运行结果:

 

 

2)利用Runnable接口(java.lang.Runnable)

 这种方法是声明实现Runnable接口的类。该类然后实现run方法。然后可以分配该类的实例,在创建Thread时作为一个参数来传递并启动

 

实例二:

  1. public class ThreadTest02 implements Runnable{  
  2.   
  3.     public void run(){  
  4.         for(int i=0; i<10; i++){  
  5.             System.out.println(“线程”+Thread.currentThread().getName()+“implements Runnable interface is running…”+i);  
  6.         }  
  7.         System.out.println(“线程”+Thread.currentThread().getName()+“执行结束,退出!”);  
  8.     }  
  9.   
  10.     public static void main(String[] args) {  
  11.         // TODO Auto-generated method stub  
  12.         ThreadTest02 t = new ThreadTest02();  
  13.         Thread thread = new Thread(t);  
  14.         thread.start();  
  15.     }  
  16.   
  17. }  

 

运行结果:


个人网站   www.software8.co


本文链接


BlogJava_首页

olympe.in法国免费空间申请

olympe.in法国免费空间申请
申请地址:https://hosting.olympe.in/join
olympe.in是一家老牌的主机提供商,提供包括免费虚拟主机及云主机等服务。此外,olympe目前提供200MB的免费虚拟主机空间,目前没有明确规定流量,可以绑定自己的域名,免费空间速度还不错,有兴趣的朋友可以申请一个免费空间玩一下。
1、olympe.in提供200MB磁盘空间,目前官方没有规定流量
2、olympe.in可以绑定自己的域名,注册时赠送一个免费二级域名
3、olymp[......]

阅读全文

鲜活优惠码

主流移动设备的屏幕参数

iPhone 5昨夜发布,早上起来看到了一些新iPhone的参数信息,于是好奇历代iPhone的屏幕参数,然后在维基百科发现了大部分主流移动设备的屏幕信息,这比iPhone 5本身给我的惊喜还要大!!

这些信息包括屏幕分辨率、宽高比、ppi、aspect ratio、css pixel ratio等,对我们开发面向移动终端的网站比如响应式设计可以提供比较全面的参考信息。

这里不多罗列,直接访问维基百科的页面吧~~


前端观察