爱着世界上的美好
摘要:爱着世界上的美好,注视世界上的苦难,挖掘深埋地下千尺的一丝丝甜,用手中的笔,送给人们清甜的希望,这样的文字是一道道的光,而成玉,就是其中一个。 午后是闷热的,在我的膝盖上,却蜿蜒流淌着微微泛着蓝的沁凉。
读着老友朱成玉传过来的书稿《下午四点,不见不散》,如同随着他走过了一年四季,感受了炽热与寒凉,单单看书的名字,就已经让人爱不释手了,里面囊括了作者多年来的美文佳作,对于喜爱他作品的人来说,是一次难得的美文盛宴。
朱成玉的文笔是唯美而抒情的,喜欢娓娓道来,喜欢寓教于情,教人向上向善向美,却一点都不生硬。我完全不用担心会很快看完,看的时候也完全不用担心会静不下心,那些日常生活和细琐的小事,很贴心,很轻浅,拂过水面不会有多大动静,不会看到放不下手,不会看到失眠,是可以随手拿来阅读随手丢下的,没有负担的一篇篇小文章。
与他相识多年,虽只见过一面,印象却是极为深刻的。这么多年过去了,一路读着他的文字,看见他为寂寞寻觅伴侣,看见他为静默寻觅字句。用他的话说,他就像一只“奔跑在雪地上的红狐,为了文字不停地咯血”。
读着它们,我的沉默是这个世界的喧嚣的天穹上熄灭的微不足道的一颗星辰。
像他这样的写作者,多是寂寞的,因为心中戒律太多,所以为自己挣不来大片繁华,可是你看他:
“许多年了,都是这样悄然走过。眼睛还是那双眼睛,笔还是那只笔,却知道了把守自己两支参赛队在徐工集团内的两块场地同时进行比赛。预赛的竞赛项目是“立式设备穿框架预留孔安装就位”。尽力不要再写出那些不干不净的字来,让思想中永远有睡莲的芳香。那一张张洁白的稿纸,是值得珍惜的雪地,还有映在上面的月光,是遥远的年代里流传过来的美德啊!”
他是在他们当地的一个基层检察院工作的,在那样枯燥的每天和法条打交道的环境里,还能写出这么优美而诗意的文字,就更难得。
他的坚持我懂得,环顾左右,如水的月光下,这样埋头写字的人,有许多;心中有坚持的人,有许多;受了误解也不辩解的,有许多;出了新书珍而重之地交付朋友手上的,也有许多,这许多人的里面,亦包括我。
我们是一路的。渺小,说不上多么快乐,辛劳,却又觉得值得。
爱着世界上的美好,注视世界上的苦难,挖掘深埋地下千尺的一丝丝甜,用手中的笔,送给人们清甜的希望,这样的文字是一道道的光,而成玉,就是其中一个。
除了唯美和抒情,他的这本书里还隐秘地藏着一种淡淡的忧伤,那是来自于旧日时光的忧郁,那些曾经里表露的岁月痕迹,显得格外珍贵,昨日的忧伤,是为了今日的欢颜铺下的花毯啊。那些细密的思想和情绪在引领着尘世的一颗颗心!
看到最后,让我不得不再一次轻叹!我觉得这本书稿里,裹着一颗珍贵的心,一颗心的黄金时代,枝繁叶茂,暗香浮动,翠绿的果实窃笑着隐藏在枝叶间……我愉快地发现,很多人正在通往这颗心的路上。
成玉嘱我为他的新书写序,希望这一段文字,权可交差吧!
共 1045 字 1 页 转到页 【编者按】这是本文作者为朱成玉先生《下午四点,不见不散》一书所作的序。虽然作者与朱成玉相识多年只见过一面,从他的文字里就像看到一只“奔跑在雪地上的红狐,为了文字不停地咯血”。作者身为一位司法工作者,在枯燥的环境里写出如此优美而诗意的文字,只因心中有坚持,手中的笔才能送给人们清甜的希望。作为书评,本文除了唯美和抒情,还隐秘地藏着一种淡淡的忧伤,显得格外珍贵。正如作者所言,“这本书稿里,裹着一颗珍贵的心,一颗心的黄金时代”,它在打动作者的同时,也通过作者优美且富有底蕴的文字,把每一位读者的心照亮。这是一篇精美的书评,阅读的过程也是一种精神上的享受。。:闲妹
1楼文友: 16:26:50 文字的魅力是无穷的,懂作者的文字是需要理解人才会有如此深刻的赏析。
2楼文友: 18:14:04 能写出这样的书序,用心用情用思想,才深刻的赏析了此书,此心,此景所涉事件和数据均以当时为准。((转自游戏邦))How to Create an Asynchronous Multiplayer Game Part 3: Loading Games from the DatabaseMay 30th, 2012by Ross PrzybylskiAsynchronous multiplayer games are awesome because players can enjoy social gaming experiences without having to commit to long sit-down sessions. This convenient style of play is made possible by online servers that deliver updates on games being played directly to a player’s device. This article will explain how games previously saved to a database are loaded by the server and made accessible within the game client’s user is article will explain:w to query a list of game records stored in a MySQL database and send the results set to the game w to interpret the query results on the client side and design a meaningful games list user interface the player can use to resume w to recreate a live and synchronous multiplayer experience from an async w to replay animations to represent the moves made by the player’s opponent while they were awayRequirementsPrerequisite knowledgeExperience developing turn based gamesFamiliarity with ActionScript 3.0Has Read “Part 2: Saving the Game State to Online Database”Required productsFlash Professional (Download trial)Smart Fox Server Pro (Download trial)MySQL DatabaseUser levelAdvancedGenerating the Player’s Games ListPopular async games like Hero Academy utilize a “games list” user interface that allow players to access and resume playing their asynchronous game en building my games list for Hero Mages, I started by creating a new user interface screen class called “HM_GamesList”. I wanted to focus on the data and code components first, so the initial design is limited to a header and a scrollable list component that will be used to populate information retrieved from the server:This interface is populated by a database query that gets a list of the active player’s game records. All of the MySQL query generation takes place on the server side, and the process for communicating with our online server looks like this:me Client: Request data from rver: Handle request, send client me Client: Receive server me Client: Perform desired task with dataStep 1: Request Game ListThe game client requests the game list from the server:Step 2: Handle Game List RequestThe server side code handles the request and sends the client back a response. In Part 2: Saving the Game State to Online Database, I explain how games are saved to a MySQL database using two tables, hm_games and hm_gameresults. The function loadGameList will build a MySQL query that returns the relevant data we need to populate the game ep 3: Receive Game List ResponseThe game client receives the server ep 4: Populate Game ListThe game client performs the desired task of populating the list:And here’s our result:Advanced Game List QueryWhile functional, the basic game list created above lacks key information needed for a solid user experience. Players need to know when the game was created, when the last turn was, whose turn it is, and most importantly who their opponents are for the game to be rging the Games and Games Results TablesThe ideal query needs to return all of the relevant information back to the client using the least resources and bandwidth as possible. This query, designed by Marco Rousonelos, programmer at Reflection Software, and laptop alias of the MySQL help forums uses ranking and derived tables to generate the desired results set:With this query we can generate results sets that look like this:Adding Additional PlayersFor games that support more than two players, we add additional lines to the query as follows:Ordering the ResultsIdeally, we’d like to return the results set in the following order:me Status (display games still in progress first)rn (display games where it’s player’s turn first)me Last Update (display games last updated first)We can achieve this by adding some sort order by statements to the query:Limiting the ResultsIt’s important to note that this query returns ALL game record results for the provided member id. As the game becomes popular and player starts to accrue games, this can result in a very large set of data. To ensure the server, network, and the user’s device are not overloaded, it is best to include a LIMIT statement so that only a targeted portion of the results are returned:Customizing the QueryQueries can be tweaked and customized as needed for inpidual games and controlled by packaging additional parameters in the server request. For example, you could store a “lowerLimit” property and a “limitSpan” property to control the limits of the th a solid query capable of returning the necessary results set, we’re ready to generate a more effective user experience to display the signing an Asynchronous Multiplayer UIThe player’s game list is the core of the async multiplayer experience. The list is used to navigate, check the status of, and join games in progress. Additionally, the game list is a great leaderboard/logging tool that can be used as a means to review past battles, opponents, and more!Relevant Game Record InformationA good game list starts with a good game record cell. Each game record should contain the following information for the player:Time last turn was taken or that game was completedTime game was createdStatus (whether it’s players turn to attack, waiting for turn, defeat, or victor)Names of players participatingThese properties are helpful to the player in choosing the desired game to load. It’s always possible to add more details, and some other possibilities might include:Unique game record idWhether or not match is rankedName of the mapGame objectiveGame record cells should ideally be designed to adapt to the size of the list so they can display appropriately on any size mobile device. Hero Mages makes use of player avatars to display character portraits for a more interesting visual display:Populating the ListOnce the game record cell layout has been designed, instances of the game record class can be added to a list component that the player can use to access their game sessions. The process of adding records to the list is similar to adding items to our basic UI list above, except instead of adding simple cells, we’re adding our own custom designed ro Mages leverages AURA multiscreen component UIs. AURA stands for Animations, Utilities, and Resources for ActionScript 3.0. It’s a library of classes and components I wrote to speed of tasks like managing listeners, resources, and designing UI. The list seen in the screenshot below is advanced component that adapts to the screen size and input controls of the user’s device. For example, if you’re playing on a touch-based input mobile device, the list is operated using swipes. The same list running on a desktop is navigated using a standard scroll bar. The list is also optimized for mobile GPU’s and can render cells at 60fps on devices like first generation e implementation of the component list is beyond the scope of this article. I will be releasing an article that explains the mechanisms of the component that will include downloadable examples in the near ading a GameThe primary function of the games list is to allow the player to load saved game sessions by selecting an item in the list. Similar to the process of saving games, loading games will require both client-side and server-side code to make a load game request, retrieve game state from the database, and fire up the game engine to restore the desired game. Once again, we follow our 4 communication steps:me Client: Request data from rver: Handle request, send client me Client: Receive server me Client: Perform desired task with dataNote: While it would be possible to gather the game state data in the game list query, I recommend using a separate server request for the inpidual game record as outlined below in order to conserve ep 1: Request Load GameEach cell in our game list will use the following code to make the request to the server for the desired game record:Step 2: Handle Load Game RequestOn the server side, we add a condition for “Load Game” request. Since Hero Mages games can also be played synchronously using Smart Fox, why not transform an async game to a live online match if the players are both online? The room loop iterates through the list of rooms on servers and checks to see if any room’s game id matches the record the player is attempting to load asynchronously. If a match is found, the server returns the room id so they can connect immediately with live player. For live matches, players load game data directly from the game room host. If a live match is not found, the server loads the game state from the TE: In order for this loop to work, it’s necessary to store the game record id as a room variable when creating a live game room. You do not need to do this if you’re only interested in asynchronous e load game function will handle the retrieval of the necessary information for loading the ep 3: Receive Load Game ResponseBack on the client side, our Smart Fox Server extension response listener needs a new condition to listen for “Load Game” response from the server. Depending on the response type, we’ll either join the existing live game or create a new game with the returned parameters:Step 4: Load Game StateThe load game function will be different for each game engine, but here are some tasks the function will need to handle:nvert the returned game state data string back into an object (See Part 2)t two distinct flags “isRunningCommandList” = true and “useAnimations” = n the list of commands through the engine to effectively “play the game” in the background up to the last command. Your engine code should check the isRunningCommandList flag to ensure any automatic responses to commands (such as counter attack actions) are not fired if they are already included in the command playing AnimationsFollowing the above steps will allow you to load any game from your games list and restore the game state so that it matches the last recorded move. Consider, however, that an asynchronous multiplayer opponent will make changes to the game state while the other player is away. Simply loading the current game state will be confusing to the player because they won’t know what commands were carried out by their opponent. For an effective asynchronous multiplayer experience, we need to make some modifications to the command recording process and the game loading cording the Last Move WitnessedThe last move witnessed must be recorded separately for each player, so we need to add an additional property to the table hm_gameresults first created in Part 2 called “lastCmd”. This property is an integer value designed to store the index of the last command this player witnessed for the en sending new game commands, simply pass the index of the command log along with the command. Then, in our code block for handling updates to the game state (created in Part 2) we’re going to add the following code just below the error response:Show Animations for Unseen MovesIn our load game handler on the server, we’ll add an additional item to the response to store the player’s lastCmd witnessed as follows:Here’s what the complete load game response looks like (combining Step 2: Handle Game Load Request with our new code)With the last command index stored, the trick to playing the appropriate animations is to reactivate the useAnimations flag once the lastCmd index is her ConsiderationsGoing beyond the steps I’ve explained, there are many ways to customize the asynchronous experience and add additional features and functionality. For instance, what might happen if a player is given unlimited time to respond to an asynchronous game? A losing player with bad sportsmanship might decide to suspend taking their turn indefinitely, preventing the winning player from claiming victory. One way to solve this problem is to enable a “maxWait” period that allows players to drop opponents if they haven’t taken their turn in so much time. For Hero Mages, I allow players to drop their opponents if they haven’t taken their turn in 3 her features that might be helpful would be search filters for displaying only active games, finding games against particular opponents, the ability to look up the stats of your opponents, ing NextThis article explained the process of building an asynchronous multiplayer game list user interface, loading stored game sessions, and replaying the opponent’s last move animations. The next article will focus on the aspect of the concept of asynchronous multiplayer match-making so that players can start new games or join existing ones without requiring a live online connection.(source:indieflashblog) 文章导航Previous Previous post: 手游和主机游戏研发应互相学习什么?下一条 Next post: 张柏芝、谢霆锋和王菲,此境。老师的书序写的真好! 做一张有字的纸,努力让上边的字有价值,因为纸寿千年。
楼文友: 19: 2: 9 渴望拜读《下午四点,不见不散》。
4楼文友: 21:55:26 有句话是听了来的:茶亦醉人何必酒,书能香我无须花。我想那茶应是好茶,这书也应是好书。以文相识的朋友,虽然见面不多,却可以把时光托付给高贵的思想和真诚的文字,留下如此深刻印象和深厚友谊,实在是一种高山流水遇知音的境界了。 茶亦醉人何必酒,书能香我不须花。守得云开见月明,不忘初心方有成。
5楼文友: 22:46:17 本文作者与《下午四点,不见不散》的作者朱成玉老师都是中国发行量最高的杂志《读者》签约作者。读了这则书评,率先从我脑海里冒出来的词汇就是 惺惺相惜。
朱成玉老师也曾是榕树下雀之巢的一员。那时他的名叫更老的老玉米。2011年之前,他是这样介绍自己的: 一个为文字滴泪、滴血的男人。主要作品:散文集《一生只有七天》、《给痛苦一个流淌的出口》等。 如今,他恢复了自己的本名,又出了新书,知名度更高了,我还订阅了他个人的公众号。
一直喜欢他的作品,总是温情脉脉的道出人生的哲理,润物细无声。
读了凉月满天的书评,我不得不感慨,他们二位才是真正的知音
爱着世界上的美好,注视世界上的苦难,挖掘深埋地下千尺的一丝丝甜,用手中的笔,送给人们清甜的希望,这样的文字是一道道的光,而成玉,就是其中一个。除了唯美和抒情,他的这本书里还隐秘地藏着一种淡淡的忧伤,那是来自于旧日时光的忧郁,那些曾经里表露的岁月痕迹,显得格外珍贵,昨日的忧伤,是为了今日的欢颜铺下的花毯啊。那些细密的思想和情绪在引领着尘世的一颗颗心!
每一句话都是那样清新隽永,与朱成玉老师文字的风格珠联璧合:同样的唯美和抒情,同样细密的思想和情绪,引领着尘世上的一颗颗心 包括我这颗略显粗粝的心。
哦,真是美极了! “小鸟虽小,可它玩的却是整个天空。”——致江山新雀之巢
奥利司他胶囊减肥效果月经有淤血正常吗东莞什么医院治疗白癜风- 下一页:奇迹暖暖8月14日微信每日一题答案分享
- 上一页:电网企业告别双重垄断
- 06月21日历史稀罕狗妈妈养了一个猫儿子天天给小猫喂奶位置
- 06月21日历史科莫多巨蜥的祖先科莫多巨蜥又名科莫多龙位置
- 06月21日历史秋田犬主人总结的养狗所受种罪位置
- 06月21日历史研究表明观察宠物狗表情可了解其情感位置
- 06月21日历史科学的训练萨摩耶位置
- 06月20日历史可卡犬怎么洗澡位置
- 06月20日历史可卡和史宾格英国史宾格犬和可卡犬区别位置
- 06月20日历史可以给阿拉斯加雪橇犬喂食人类的食物么位置
- 06月20日历史可以用洗发水给土猫洗澡吗位置
- 06月20日历史可以喂刚毛猎狐梗吃蔬菜吗位置
- 06月20日历史可卡犬价格纯种可卡犬多少钱一只全国报价位置
- 06月20日历史可卡犬也会长脂肪瘤吗位置