小编Jam*_*son的帖子

Javascript画布碰撞检测

我正在使用需要碰撞检测的画布在Javascript中构建游戏,在这种情况下,如果玩家精灵击中一个盒子,则不允许玩家通过该框.

我有一个名为的全局数组blockList,它包含绘制到画布的所有框.它看起来像这样:

var blockList = [[50, 400, 100, 100]];
Run Code Online (Sandbox Code Playgroud)

他们被这样的画布所吸引:

c.fillRect(blockList[0][0], blockList[0][1], blockList[0][2], blockList[0][3]);
Run Code Online (Sandbox Code Playgroud)

我还有一个玩家对象,它有一个更新方法和一个绘制方法.更新根据键盘输入等设置播放器的位置,主游戏循环使用绘制将玩家绘制到画布.玩家被画成这样:

this.draw = function(timestamp) {
        if(this.state == "idle") {
            c.drawImage(this.idleSprite, this.idleSprite.frameWidth * this.idleSprite.frameCount, 0, this.idleSprite.frameWidth, this.idleSprite.frameHeight, this.xpos, this.ypos, this.idleSprite.frameWidth, this.idleSprite.frameHeight);
            if(timestamp - this.lastDraw > this.idleSprite.updateInterval) {
                this.lastDraw = timestamp;
                if(this.idleSprite.frameCount < this.idleSprite.frames - 1) { this.idleSprite.frameCount++; } else { this.idleSprite.frameCount = 0; }
            }
        } else if(this.state == "running") {
            var height = 0;
            if(this.facing == "left") { height = 37; }
            c.drawImage(this.runningSprite, this.runningSprite.frameWidth …
Run Code Online (Sandbox Code Playgroud)

javascript canvas collision-detection

7
推荐指数
1
解决办法
7442
查看次数

setInterval()只运行一次函数

我想定期查询PHP脚本以获取新消息.为此,我使用了setInterval()函数和AJAX.

$(document).ready(function(){

    var queryInterval = 1000; /* How fast we query for new messages */

    setInterval(getMessages(), queryInterval);

    function getMessages() {
        console.log("tick");
    }

});
Run Code Online (Sandbox Code Playgroud)

但是,当我查看Javascript控制台时,我只看到"滴答"一次.我确保控制台不会再忽略相同字符串的日志,所以如果代码工作正常,它应该每秒在控制台中显示"tick".

谁知道这里可能出现什么问题?

javascript setinterval

7
推荐指数
2
解决办法
2万
查看次数

添加外键约束时,哪种方向最佳?

想象一下,我有三个表叫profiles,profiles_skillsskills.这是一种HABTM关系,其中个人资料可以拥有许多技能,而技能可以属于许多个人资料.

我需要在这些表之间设置一个外键约束.我的问题是,外键应该是什么方向?例如,我这样做:

ALTER TABLE profiles_skills ADD FOREIGN KEY (skill_id) REFERENCES skills(id);
ALTER TABLE profiles_skills ADD FOREIGN KEY (profile_id) REFERENCES profiles(id);
Run Code Online (Sandbox Code Playgroud)

或者我这样做:

ALTER TABLE profiles ADD FOREIGN KEY (id) REFERENCES profiles_skills(profile_id);  
ALTER TABLE skills ADD FOREIGN KEY (id) REFERENCES profiles_skills(skill_id);
Run Code Online (Sandbox Code Playgroud)

我从来没有真正遵循惯例,我只是按照我输入的方式来做,并没有遇到任何问题.但我总是在脑海里想知道它是否真的很重要.

mysql database database-design relational-database

7
推荐指数
1
解决办法
4387
查看次数

使用CakePHP的更安全的散列算法

默认情况下,CakePHP似乎使用SHA1算法来散列密码,并且似乎只提供SHA256作为替代:

http://api.cakephp.org/view_source/security#line-86

在我将应用程序公开之前,我希望切换到更安全的密码散列解决方案,以便在切换到更安全的散列算法时节省未来的麻烦.我已经四处寻找使用bcrypt或类似内容的一些指南,但它们似乎都适用于旧版本的Cake,或者很难实现散列.

是否有某个指南可以告诉我如何在不更改模型或控制器中的任何代码的情况下集成更好的密码哈希?

另外,还有一个小问题,为什么Cake devs在发布时只包含SHA密码哈希?众所周知,SHA是一种破解的密码哈希算法,在我看来,这样一个声誉良好的框架不会忽略这一点.

php passwords hash cakephp

6
推荐指数
1
解决办法
2042
查看次数

从表列读取二进制到byte []数组

我在我的应用程序中使用PBKDF2来存储用户密码.在我的Users表中,我有一个SaltPassword列,其确定如下:

// Hash the users password using PBKDF2
var DeriveBytes = new Rfc2898DeriveBytes(_Password, 20);
byte[] _Salt = DeriveBytes.Salt;
byte[] _Key = DeriveBytes.GetBytes(20);  // _Key is put into the Password column
Run Code Online (Sandbox Code Playgroud)

在我的登录页面上,我需要检索此盐和密码.因为它们是byte []数组,所以我将它们存储在我的表中varbinary(MAX).现在我需要检索它们以与用户输入的密码进行比较.我该怎么用SqlDataReader呢?目前我有这个:

cn.Open();
SqlCommand Command = new SqlCommand("SELECT Salt, Password FROM Users WHERE Email = @Email", cn);
Command.Parameters.Add("@Email", SqlDbType.NVarChar).Value = _Email;
SqlDataReader Reader = Command.ExecuteReader(CommandBehavior.CloseConnection);
Reader.Read();
if (Reader.HasRows)
{
    // This user exists, check their password with the one entered
    byte[] _Salt …
Run Code Online (Sandbox Code Playgroud)

c# sql-server asp.net arrays

6
推荐指数
1
解决办法
3万
查看次数

使用nginx通过index.php路由请求

我正在将我的服务器从Apache迁移到Nginx并拥有这个非常简单的.htaccess规则:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
Run Code Online (Sandbox Code Playgroud)

它背后的想法是将每个请求指向前端控制器(index.php).我正在尝试用Nginx做同样的事情.我使用在线转换器来制作这个Nginx位置块:

location / {
    if (!-e $request_filename){
        rewrite ^(.*)$ /index.php break;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我将它添加到我的网站的配置时,Nginx只是下载PHP文件的源代码.作为参考,这是整个配置文件:

http://pastebin.com/tyKtM1iB

我知道PHP的工作原理,好像我删除了位置块并使文件<?php phpinfo();正常工作.

任何帮助,将不胜感激.

php apache .htaccess nginx front-controller

6
推荐指数
1
解决办法
5182
查看次数

使用Git在4人项目上进行协作

在我的一个大学项目中,我是一个由4名开发人员组成的小组,负责从头开始开发Web应用程序.我们都对Git有了非常基本的了解,并决定采用它进行代码库协作,我们有一个repo设置,每个人都是GitHub的合作者.

在过去的几个月里,我们只是克隆并提交到主分支机构,这已经很好了.然而,最近有时两个或两个以上的人同时在代码库上工作,我们经常最终会有一些人在提交时落后并且在提交之前必须克隆repo,这有时最终会导致他们的更改丢失.

今天,其中一个小组成员谈到了一个"开发"分支,我们都克隆并提交,然后在每个sprint结束时合并到master分支.我们试过这个,但没有真正看到改进,因为我们仍然都在使用相同的代码库,因此出现了与之前相同的问题.

其他人有了分叉的想法(这对我来说是新东西)主要的回购,然后处理它然后将拉请求发送到主回购,然后可以合并.这在实践中听起来像一个好的计划,因为如果更改了代码,则可以检查更改并进行修复.无论如何,这就是我理解它的方式.

但正如我所说,我们对Git都很陌生,对整个想法有一个非常基本的把握.组建由4名开发人员组成的团队的标准方法是什么?我已经了解了一些Git文档,但对于只知道如何克隆并提交到主分支的人来说,这一切都让人感到困惑.

感谢您的任何帮助!

git version-control github

6
推荐指数
1
解决办法
139
查看次数

使div的高度为视口高度的100%或页面的整个高度

如果你看看这个jsfiddle例子:http://jsfiddle.net/2YbpZ/

您可以看到sidebarcontent元素都延伸到视口的底部.这就是我要的.

但是,当给出一些拉伸页面并要求用户滚动的内容时:http://jsfiddle.net/p6qGg/

sidebarcontent在视图端口的底部的div切断.我知道为什么会发生这种情况,因为它100%指的是父元素的整个高度,在这种情况下是视口,但是当我更改标记以包含围绕这两个元素的包装div并发生min-height: 100%这种情况时:http:// jsfiddle.net/Lr6k9/

类似地,如果内容不再足够长以至于不适合视口,那么sidebarcontentdiv就好像根本没有分配高度:http://jsfiddle.net/xsHHv/

所以我的问题是,如果内容没有拉伸到页面上,我怎么能将div sidebarcontentdiv视为视口的高度,或者如果内容没有拉到内容的高度呢?

html css

5
推荐指数
1
解决办法
3438
查看次数

自动语法荧光笔

我正在寻找一个用JavaScript编写的优秀的全方位语法高亮显示器,它将自动检测所使用的语言并应用正确的语法高亮显示.

我从一个简单的谷歌搜索中找到了无数的,但他们都必须在<pre>元素上有某种格式化的类<pre class="highlight-php">.

我注意到StackOverflow的语法突出显示设法从pre块中自动完成,任何人都知道他们正在使用什么库?

谢谢!

syntax-highlighting

5
推荐指数
1
解决办法
1284
查看次数

使用带有 fopen 的代理服务器

我正在尝试使用 fopen 从另一个网站读取远程文件。我想使用代理来做到这一点,据我所知,我可以做到:

$context = stream_context_create(array(
    'http' => array(
        'proxy' => 'tcp://192.168.10.10:80' // The proxy server address and port
    ),
));

$file = fopen($url, 'r', false, $context)
Run Code Online (Sandbox Code Playgroud)

但是有没有办法使用该代理的用户名和密码进行身份验证?或者我仅限于必须使用公共代理?

此外,代理定义是tcp://192.168.10.10:80. 如果我想使用 HTTP 代理,我可以随意将其更改为http://192.168.10.10:80吗?

谢谢。

php proxy fopen stream

5
推荐指数
1
解决办法
6597
查看次数