我正在使用javascript和asp.net MVC实现基于浏览器回合制的游戏,未来可能会使用html5。
我有一些关于它的问题,因为我对asp.net MVC和javascript很新:
我不知道如何在javascript和MVC之间进行交互, 这意味着如何创建一个不重新加载页面的GUI,而是将使用它的信息发送到使用它的服务器上并相应地更新GUI。
例如:单击按钮将调用服务器端函数,该函数将更新网站上的某些字段而不重新加载页面。
自然,我想让javascript只负责GUI, 并且所有的计算都在服务器端,似乎:
点击
向服务器端功能发送信息
计算和更新GUI
我在战斗中需要为每位玩家保存大量数据 我想知道保存这些数据的最佳位置。
我可能会有一个包含数据的Battle对象,它将访问数据库并使用javascript更新gui。
由于它是一个基础游戏,我将不得不实现一个将在玩家之间同步的系统。我认为这样做的最好方法是在每个客户端上创建一个计时器, 每2秒钟将从数据库中获取信息并相应地更新GUI(如果某些内容已发生变化)(例如,其他玩家完成了他的移动,X类型的移动造成X点伤害)。你有更好的解决方案吗?
感谢。
答案 0 :(得分:3)
是的,您需要Ajax和可能的一些JavaScript库来协助您的单页应用。您可以通过使用jQuery来熟悉Ajax方法来开始原型设计:
<script type="text/javascript">
$(function() {
$('#battleHitButton').click(function(e) {
$.ajax({
type: 'POST',
url: 'Battle/Hit',
data: { 'opponent': 'someName', 'bonus': 42 },
success: function(data) {
$('#result').html(data);
// do some other stuff after hit
}
});
});
});
</script>
后端的MVC应用程序需要在控制器中执行操作以支持/Battle/Hit
URL
public class BattleController : Controller
{
[HttpPost]
public ActionResult Hit(BattleModel model)
{
string whoToHit = model.opponent;
int bonusDamage = model.bonus;
// do battle, persist to database, etc
}
}
这绝不是一个完整的解决方案。但是,它应该让你开始考虑MVC和JavaScript / jQuery。一旦掌握了它,我强烈建议如果你的应用程序变得更复杂,那么可以在jQuery中探索一些替代方法。 jQuery.ajax
可以迅速变成意大利面条代码!
答案 1 :(得分:1)
我会研究javascript长轮询和服务器端异步处理 - 以便客户端立即更新服务器端发生的事情。 java中的示例:http://www.playframework.org/documentation/1.2/asynchronous
要创建模型客户端,您可以查看backbone.js
顺便说一句,谷歌搜索asp.net ajax聊天应用程序可能会给你一些良好的客户沟通起点