Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Anton

Зарегистрирован: 10.11.2003 Сообщения: 727 Откуда: Киев
|
Добавлено: Чт Ноя 20, 2008 3:49 pm Заголовок сообщения: Zelda64rus - вопрос к знатокам javascript |
|
|
Проблема следующая.
У меня на www.shedevr.org.ru/zelda64rus на главной странице не летает фея за мышой в мозилле 3.0.4.
В ИЕ все путем всегда было и есть. А мозилла атмосферу портит...
Код и верстка хтмл у меня там ужасные (если знатоки начнут копать), я знаю
Но пока нужно минимум - чтоб картинка летала за мышой в любом браузере.
Ай нид хэлп...
Сам код на яве для летающей за мышой картинки был позаимствован (или я его спёр, наверное... ), 100 лет назад, отсюда - http://quakegate.narod.ru/ (смотреть в ИЕ, до сих пор там персонаж из Квэйка за мышой летает). |
|
Вернуться к началу |
|
 |
HoRRoR RRC2008


Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Чт Ноя 20, 2008 5:54 pm Заголовок сообщения: |
|
|
А ещё там привязка по Y к верху страницы явно лишняя (если скроллить страницу вниз, картинка останется наверху). _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
 |
Anton

Зарегистрирован: 10.11.2003 Сообщения: 727 Откуда: Киев
|
Добавлено: Чт Ноя 20, 2008 6:19 pm Заголовок сообщения: |
|
|
я знаю..
но в яве не силён, потому прошу небольшой хэлп.
(+ и это тоже, с игреками) |
|
Вернуться к началу |
|
 |
HoRRoR RRC2008


Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Чт Ноя 20, 2008 6:48 pm Заголовок сообщения: |
|
|
Замени
Код: | function MoveHandlerIE() {
Xpos = window.event.x;
Ypos = window.event.y;
} |
на:
Код: | function MoveHandlerIE() {
Xpos = window.event.x + document.body.scrollLeft;
Ypos = window.event.y + document.body.scrollTop;
} |
Это исправит проблему со скроллингом. _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
 |
Anton

Зарегистрирован: 10.11.2003 Сообщения: 727 Откуда: Киев
|
Добавлено: Пт Ноя 21, 2008 12:00 pm Заголовок сообщения: |
|
|
Спасибо, скролл стал нормальный )
Осталось к мозилле прикрутить ) |
|
Вернуться к началу |
|
 |
Guyver RRC2008


Зарегистрирован: 12.05.2005 Сообщения: 302 Откуда: СИНЕГОРЬЕ
|
Добавлено: Пт Ноя 21, 2008 10:09 pm Заголовок сообщения: |
|
|
Сколько я видел подобные скрипты - в мозилле они не работали, в опере, нетскейпе и интернет экспло-ре работали... И вроде пока никто не адаптировал скрипт... _________________ Я не волшебник - я только учусь...
Мой сайт: GUYVERperevod |
|
Вернуться к началу |
|
 |
Guyver RRC2008


Зарегистрирован: 12.05.2005 Сообщения: 302 Откуда: СИНЕГОРЬЕ
|
Добавлено: Пт Ноя 21, 2008 10:17 pm Заголовок сообщения: |
|
|
Хотя нет, попробуй этот код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Elastic Trail Script - Updated NS4+ (to NS7.2) IE4+ FF1.0.7 Opera8</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<div id="dot0" style="position: absolute; visibility: hidden; height: 11; width: 11;">
<img src="bullet.gif" height=11 width=11>
</div>
<div id="dot1" style="position: absolute; height: 11; width: 11;">
<img src="bullet.gif" height=11 width=11>
</div>
<div id="dot2" style="position: absolute; height: 11; width: 11;">
<img src="bullet.gif" height=11 width=11>
</div>
<div id="dot3" style="position: absolute; height: 11; width: 11;">
<img src="bullet.gif" height=11 width=11>
</div>
<div id="dot4" style="position: absolute; height: 11; width: 11;">
<img src="bullet.gif" height=11 width=11>
</div>
<div id="dot5" style="position: absolute; height: 11; width: 11;">
<img src="bullet.gif" height=11 width=11>
</div>
<div id="dot6" style="position: absolute; height: 11; width: 11;">
<img src="bullet.gif" height=11 width=11>
</div>
<script type="text/javascript">
/*
Elastic Trail script (By Philip Winston @ pwinston@yahoo.com, URL: http://www.geocities.com/pwinston/)
Script featured on Dynamicdrive.com
For this and 100's more DHTML scripts, visit http://dynamicdrive.com
Updated by jscheuer1 in http://dynamicdrive.com/forums for modern Mozilla and Opera8
Originally and still good in IE4+ early Netscape
*/
var nDots = 7;
var Xpos = 0;
var Ypos = 0;
// fixed time step, no relation to real time
var DELTAT = .01;
// size of one spring in pixels
var SEGLEN = 10;
// spring constant, stiffness of springs
var SPRINGK = 10;
// all the physics is bogus, just picked stuff to
// make it look okay
var MASS = 1;
// Positive XGRAVITY pulls right, negative pulls left
// Positive YGRAVITY pulls down, negative up
var XGRAVITY = 0;
var YGRAVITY = 50;
// RESISTANCE determines a slowing force proportional to velocity
var RESISTANCE = 10;
// stopping criterea to prevent endless jittering
// doesn't work when sitting on bottom since floor
// doesn't push back so acceleration always as big
// as gravity
var STOPVEL = 0.1;
var STOPACC = 0.1;
var DOTSIZE = 11;
// BOUNCE is percent of velocity retained when
// bouncing off a wall
var BOUNCE = 0.75;
/////////////////Stop Editing the Script///////////////
function iecompattest(){
return (document.compatMode && document.compatMode.indexOf("CSS")!=-1)? document.documentElement : document.body
}
var isNetscape = navigator.appName=="Netscape";
var dots = new Array();
for (i = 0; i < nDots; i++)
dots[i] = new dot(i);
// set their positions
for (i = 0; i < nDots; i++) {
dots[i].obj.left = dots[i].X;
dots[i].obj.top = dots[i].Y;
}
setInterval("animate()", 20);
function dot(i)
{
this.X = Xpos;
this.Y = Ypos;
this.dx = 0;
this.dy = 0;
if ((isNetscape)&&(!document.getElementById))
this.obj = eval("document.dot" + i);
else if (document.all)
this.obj = document.all['dot' + i].style;
else if (document.getElementById)
this.obj = document.getElementById('dot' + i).style;
else
return;
}
// just save mouse position for animate() to use
function MoveHandler(e)
{
Xpos = e.pageX;
Ypos = e.pageY;
return true;
}
// just save mouse position for animate() to use
function MoveHandlerIE() {
Xpos = window.event.x + iecompattest().scrollLeft;
Ypos = window.event.y + iecompattest().scrollTop;
}
if (isNetscape) {
document.captureEvents(Event.MOUSEMOVE);
document.onmousemove = MoveHandler;
} else {
document.onmousemove = MoveHandlerIE;
}
function vec(X, Y)
{
this.X = X;
this.Y = Y;
}
// adds force in X and Y to spring for dot[i] on dot[j]
function springForce(i, j, spring)
{
var dx = (dots[i].X - dots[j].X);
var dy = (dots[i].Y - dots[j].Y);
var len = Math.sqrt(dx*dx + dy*dy);
if (len > SEGLEN) {
var springF = SPRINGK * (len - SEGLEN);
spring.X += (dx / len) * springF;
spring.Y += (dy / len) * springF;
}
}
function animate() {
// dots[0] follows the mouse,
// though no dot is drawn there
var start = 0;
dots[0].X = Xpos;
dots[0].Y = Ypos;
start = 1;
for (i = start ; i < nDots; i++ ) {
var spring = new vec(0, 0);
if (i > 0) {
springForce(i-1, i, spring);
}
if (i < (nDots - 1)) {
springForce(i+1, i, spring);
}
// air resisitance/friction
var resist = new vec(-dots[i].dx * RESISTANCE,
-dots[i].dy * RESISTANCE);
// compute new accel, including gravity
var accel = new vec((spring.X + resist.X)/MASS + XGRAVITY,
(spring.Y + resist.Y)/ MASS + YGRAVITY);
// compute new velocity
dots[i].dx += (DELTAT * accel.X);
dots[i].dy += (DELTAT * accel.Y);
// stop dead so it doesn't jitter when nearly still
if (Math.abs(dots[i].dx) < STOPVEL &&
Math.abs(dots[i].dy) < STOPVEL &&
Math.abs(accel.X) < STOPACC &&
Math.abs(accel.Y) < STOPACC) {
dots[i].dx = 0;
dots[i].dy = 0;
}
// move to new position
dots[i].X += dots[i].dx;
dots[i].Y += dots[i].dy;
// get size of window
var height, width;
if (isNetscape) {
height = window.innerHeight + window.pageYOffset;
width = window.innerWidth + window.pageXOffset;
} else {
height = iecompattest().clientHeight + iecompattest().scrollTop-8;
width = iecompattest().clientWidth + iecompattest().scrollLeft;
}
// bounce off 3 walls (leave ceiling open)
if (dots[i].Y >= height - DOTSIZE - 1) {
if (dots[i].dy > 0) {
dots[i].dy = BOUNCE * -dots[i].dy;
}
dots[i].Y = height - DOTSIZE - 1;
}
if (dots[i].X >= width - DOTSIZE) {
if (dots[i].dx > 0) {
dots[i].dx = BOUNCE * -dots[i].dx;
}
dots[i].X = width - DOTSIZE - 1;
}
if (dots[i].X < 0) {
if (dots[i].dx < 0) {
dots[i].dx = BOUNCE * -dots[i].dx;
}
dots[i].X = 0;
}
// move img to new position
dots[i].obj.left = dots[i].X;
dots[i].obj.top = dots[i].Y;
}
}
</script>
</body>
</html> _________________ Я не волшебник - я только учусь...
Мой сайт: GUYVERperevod |
|
Вернуться к началу |
|
 |
Anton

Зарегистрирован: 10.11.2003 Сообщения: 727 Откуда: Киев
|
Добавлено: Сб Ноя 22, 2008 10:10 pm Заголовок сообщения: |
|
|
Таки работает! Спасибо )
Только мне б его прикрутить теперь правильно к себе на страничку..
На днях попробую. |
|
Вернуться к началу |
|
 |
Guyver RRC2008


Зарегистрирован: 12.05.2005 Сообщения: 302 Откуда: СИНЕГОРЬЕ
|
Добавлено: Вт Ноя 25, 2008 12:00 am Заголовок сообщения: |
|
|
Ну слава богу... Я не мог проверить точно код из-за отсутствия мозиллы.
А что там прикручивать - наливай, да пей ;о))))) _________________ Я не волшебник - я только учусь...
Мой сайт: GUYVERperevod |
|
Вернуться к началу |
|
 |
Anton

Зарегистрирован: 10.11.2003 Сообщения: 727 Откуда: Киев
|
Добавлено: Вт Ноя 25, 2008 10:11 am Заголовок сообщения: |
|
|
да надо там лишние "dot"-ы поубирать.
для меня ява - это китайская грамота ) |
|
Вернуться к началу |
|
 |
Anton

Зарегистрирован: 10.11.2003 Сообщения: 727 Откуда: Киев
|
Добавлено: Вт Ноя 25, 2008 5:33 pm Заголовок сообщения: |
|
|
Все сделал, только хотелось бы чтоб в спокойном состоянии курсора мыши фея находилась НАД курсором, а не под ним.
Это можно сделать?
Код сейчас такой:
Код: |
<div id="dot0" style="position: absolute; visibility: hidden; height: 11; width: 11;">
<img src="img/navi.gif" height=30 width=30> </div><div id="dot1" style="position: absolute; height: 11; width: 11;">
<img src="img/navi.gif" height=30 width=30> </div>
<script type="text/javascript">
/*
Elastic Trail script (By Philip Winston @ pwinston@yahoo.com, URL: http://www.geocities.com/pwinston/)
Script featured on Dynamicdrive.com
For this and 100's more DHTML scripts, visit http://dynamicdrive.com
Updated by jscheuer1 in http://dynamicdrive.com/forums for modern Mozilla and Opera8
Originally and still good in IE4+ early Netscape
*/
var nDots = 2;
var Xpos = 0;
var Ypos = 0;
// fixed time step, no relation to real time
var DELTAT = .01;
// size of one spring in pixels
var SEGLEN = 10;
// spring constant, stiffness of springs
var SPRINGK = 10;
// all the physics is bogus, just picked stuff to
// make it look okay
var MASS = 3;
// Positive XGRAVITY pulls right, negative pulls left
// Positive YGRAVITY pulls down, negative up
var XGRAVITY = 0;
var YGRAVITY = 50;
// RESISTANCE determines a slowing force proportional to velocity
var RESISTANCE = 20;
// stopping criterea to prevent endless jittering
// doesn't work when sitting on bottom since floor
// doesn't push back so acceleration always as big
// as gravity
var STOPVEL = 0.1;
var STOPACC = 0.1;
var DOTSIZE = 30;
// BOUNCE is percent of velocity retained when
// bouncing off a wall
var BOUNCE = 0.4;
/////////////////Stop Editing the Script///////////////
function iecompattest(){
return (document.compatMode && document.compatMode.indexOf("CSS")!=-1)? document.documentElement : document.body
}
var isNetscape = navigator.appName=="Netscape";
var dots = new Array();
for (i = 0; i < nDots; i++)
dots[i] = new dot(i);
// set their positions
for (i = 0; i < nDots; i++) {
dots[i].obj.left = dots[i].X;
dots[i].obj.top = dots[i].Y;
}
setInterval("animate()", 20);
function dot(i)
{
this.X = Xpos;
this.Y = Ypos;
this.dx = 0;
this.dy = 0;
if ((isNetscape)&&(!document.getElementById))
this.obj = eval("document.dot" + i);
else if (document.all)
this.obj = document.all['dot' + i].style;
else if (document.getElementById)
this.obj = document.getElementById('dot' + i).style;
else
return;
}
// just save mouse position for animate() to use
function MoveHandler(e)
{
Xpos = e.pageX;
Ypos = e.pageY;
return true;
}
// just save mouse position for animate() to use
function MoveHandlerIE() {
Xpos = window.event.x + iecompattest().scrollLeft;
Ypos = window.event.y + iecompattest().scrollTop;
}
if (isNetscape) {
document.captureEvents(Event.MOUSEMOVE);
document.onmousemove = MoveHandler;
} else {
document.onmousemove = MoveHandlerIE;
}
function vec(X, Y)
{
this.X = X;
this.Y = Y;
}
// adds force in X and Y to spring for dot[i] on dot[j]
function springForce(i, j, spring)
{
var dx = (dots[i].X - dots[j].X);
var dy = (dots[i].Y - dots[j].Y);
var len = Math.sqrt(dx*dx + dy*dy);
if (len > SEGLEN) {
var springF = SPRINGK * (len - SEGLEN);
spring.X += (dx / len) * springF;
spring.Y += (dy / len) * springF;
}
}
function animate() {
// dots[0] follows the mouse,
// though no dot is drawn there
var start = 0;
dots[0].X = Xpos;
dots[0].Y = Ypos;
start = 1;
for (i = start ; i < nDots; i++ ) {
var spring = new vec(0, 0);
if (i > 0) {
springForce(i-1, i, spring);
}
if (i < (nDots - 1)) {
springForce(i+1, i, spring);
}
// air resisitance/friction
var resist = new vec(-dots[i].dx * RESISTANCE,
-dots[i].dy * RESISTANCE);
// compute new accel, including gravity
var accel = new vec((spring.X + resist.X)/MASS + XGRAVITY,
(spring.Y + resist.Y)/ MASS + YGRAVITY);
// compute new velocity
dots[i].dx += (DELTAT * accel.X);
dots[i].dy += (DELTAT * accel.Y);
// stop dead so it doesn't jitter when nearly still
if (Math.abs(dots[i].dx) < STOPVEL &&
Math.abs(dots[i].dy) < STOPVEL &&
Math.abs(accel.X) < STOPACC &&
Math.abs(accel.Y) < STOPACC) {
dots[i].dx = 0;
dots[i].dy = 0;
}
// move to new position
dots[i].X += dots[i].dx;
dots[i].Y += dots[i].dy;
// get size of window
var height, width;
if (isNetscape) {
height = window.innerHeight + window.pageYOffset;
width = window.innerWidth + window.pageXOffset;
} else {
height = iecompattest().clientHeight + iecompattest().scrollTop-8;
width = iecompattest().clientWidth + iecompattest().scrollLeft;
}
// bounce off 3 walls (leave ceiling open)
if (dots[i].Y >= height - DOTSIZE - 1) {
if (dots[i].dy > 0) {
dots[i].dy = BOUNCE * -dots[i].dy;
}
dots[i].Y = height - DOTSIZE - 1;
}
if (dots[i].X >= width - DOTSIZE) {
if (dots[i].dx > 0) {
dots[i].dx = BOUNCE * -dots[i].dx;
}
dots[i].X = width - DOTSIZE - 1;
}
if (dots[i].X < 0) {
if (dots[i].dx < 0) {
dots[i].dx = BOUNCE * -dots[i].dx;
}
dots[i].X = 0;
}
// move img to new position
dots[i].obj.left = dots[i].X;
dots[i].obj.top = dots[i].Y;
}
}
</script> |
|
|
Вернуться к началу |
|
 |
HoRRoR RRC2008


Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Вт Ноя 25, 2008 6:07 pm Заголовок сообщения: |
|
|
Код: | function MoveHandlerIE() {
Xpos = window.event.x + iecompattest().scrollLeft;
Ypos = window.event.y + iecompattest().scrollTop;
} |
Думаю, можно прибавить/отнять любое значение - на него сместится положение феи. _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
 |
Anton

Зарегистрирован: 10.11.2003 Сообщения: 727 Откуда: Киев
|
Добавлено: Вт Ноя 25, 2008 6:17 pm Заголовок сообщения: |
|
|
так а где конкретно писать значения (и какие) в данном куске скрипта... ?  |
|
Вернуться к началу |
|
 |
_AntZ_
Зарегистрирован: 09.05.2008 Сообщения: 90 Откуда: Vladivostok, Russia
|
Добавлено: Вт Ноя 25, 2008 6:21 pm Заголовок сообщения: |
|
|
Вопрос: а то, что фея бьётся головой ап стену как мячик, это нормально? То, что фея внизу, тоже плохо - выглядит так, как будто она на резинке подвешена. Лучше немного сбоку её поместить. |
|
Вернуться к началу |
|
 |
Anton

Зарегистрирован: 10.11.2003 Сообщения: 727 Откуда: Киев
|
Добавлено: Вт Ноя 25, 2008 6:27 pm Заголовок сообщения: |
|
|
Ну не знаю, мне кстати нравится, что она бьется головой об стенку )
Находится в текущих рамках окна, так сказать..
Хотя код есть выше. Подсказывай )
Фею хочу сверху-справа от курсора. |
|
Вернуться к началу |
|
 |
_AntZ_
Зарегистрирован: 09.05.2008 Сообщения: 90 Откуда: Vladivostok, Russia
|
Добавлено: Вт Ноя 25, 2008 6:30 pm Заголовок сообщения: |
|
|
Мне вот так вот нравится:
Код: | Xpos = window.event.x + iecompattest().scrollLeft + 20;
Ypos = window.event.y + iecompattest().scrollTop - 80; |
|
|
Вернуться к началу |
|
 |
Anton

Зарегистрирован: 10.11.2003 Сообщения: 727 Откуда: Киев
|
Добавлено: Вт Ноя 25, 2008 6:48 pm Заголовок сообщения: |
|
|
че-то она все-равно головой бьется и снизу...
Последний раз редактировалось: Anton (Вт Ноя 25, 2008 6:53 pm), всего редактировалось 1 раз |
|
Вернуться к началу |
|
 |
Anton

Зарегистрирован: 10.11.2003 Сообщения: 727 Откуда: Киев
|
Добавлено: Вт Ноя 25, 2008 6:53 pm Заголовок сообщения: |
|
|
А не...
в ИЕ стала так, как тебе нравится... )
а вот в Мозилле ничего не поменялось.. |
|
Вернуться к началу |
|
 |
_AntZ_
Зарегистрирован: 09.05.2008 Сообщения: 90 Откуда: Vladivostok, Russia
|
Добавлено: Вт Ноя 25, 2008 8:00 pm Заголовок сообщения: |
|
|
Га-га. Сделал фичу. Если по фее кликнуть мышкой, она умирает и падает вниз. Если ещё раз кликнуть, она оживает и снова начинает летать. Забавный этот джаваскрипт
Код: |
/*
Elastic Trail script (By Philip Winston @ pwinston@yahoo.com, URL: http://www.geocities.com/pwinston/)
Script featured on Dynamicdrive.com
For this and 100's more DHTML scripts, visit http://dynamicdrive.com
Updated by jscheuer1 in http://dynamicdrive.com/forums for modern Mozilla and Opera8
Originally and still good in IE4+ early Netscape
*/
var nDots = 2;
var Xpos = 0;
var Ypos = 0;
// fixed time step, no relation to real time
var DELTAT = .01;
// size of one spring in pixels
var SEGLEN = 10;
// spring constant, stiffness of springs
var SPRINGK = 10;
// all the physics is bogus, just picked stuff to
// make it look okay
var MASS = 3;
// Positive XGRAVITY pulls right, negative pulls left
// Positive YGRAVITY pulls down, negative up
var XGRAVITY = 0;
var YGRAVITY = 50;
// RESISTANCE determines a slowing force proportional to velocity
var RESISTANCE = 20;
// stopping criterea to prevent endless jittering
// doesn't work when sitting on bottom since floor
// doesn't push back so acceleration always as big
// as gravity
var STOPVEL = 0.1;
var STOPACC = 0.1;
var DOTSIZE = 30;
// BOUNCE is percent of velocity retained when
// bouncing off a wall
var BOUNCE = 0.4;
/////////////////Stop Editing the Script///////////////
function iecompattest(){
return (document.compatMode && document.compatMode.indexOf("CSS")!=-1)? document.documentElement : document.body
}
var isNetscape = navigator.appName=="Netscape";
var dots = new Array();
for (i = 0; i < nDots; i++)
dots[i] = new dot(i);
// set their positions
for (i = 0; i < nDots; i++) {
dots[i].obj.left = dots[i].X;
dots[i].obj.top = dots[i].Y;
}
setInterval("animate()", 20);
function dot(i)
{
this.X = Xpos;
this.Y = Ypos;
this.dx = 0;
this.dy = 0;
if ((isNetscape)&&(!document.getElementById))
this.obj = eval("document.dot" + i);
else if (document.all)
this.obj = document.all['dot' + i].style;
else if (document.getElementById)
this.obj = document.getElementById('dot' + i).style;
else
return;
}
// just save mouse position for animate() to use
function MoveHandler(e)
{
Xpos = e.pageX;
Ypos = e.pageY;
return true;
}
// just save mouse position for animate() to use
function MoveHandlerIE() {
Xpos = window.event.x + iecompattest().scrollLeft + 20;
Ypos = window.event.y + iecompattest().scrollTop - 80;
}
dead = 0;
function ClickHandlerIE() {
tempXpos = window.event.x + iecompattest().scrollLeft;
tempYpos = window.event.y + iecompattest().scrollTop ;
tempYpos -= 25 // dunno why, but real position of image is lower than curY, so fix this.
tempI = nDots - 1;
if ( (dots[tempI].curX <= tempXpos) && (tempXpos < dots[tempI].curX + 30) &&
(dots[tempI].curY - 30 <= tempYpos) && (tempYpos < dots[tempI].curY ) )
{
if (dead == 0) dead = 1; else dead = 0;
}
}
if (isNetscape) {
document.captureEvents(Event.MOUSEMOVE);
document.onmousemove = MoveHandler;
} else {
document.onmousemove = MoveHandlerIE;
document.onmousedown = ClickHandlerIE;
}
function vec(X, Y)
{
this.X = X;
this.Y = Y;
}
// adds force in X and Y to spring for dot[i] on dot[j]
function springForce(i, j, spring)
{
var dx = (dots[i].X - dots[j].X);
var dy = (dots[i].Y - dots[j].Y);
var len = Math.sqrt(dx*dx + dy*dy);
if (len > SEGLEN) {
var springF = SPRINGK * (len - SEGLEN);
spring.X += (dx / len) * springF;
spring.Y += (dy / len) * springF;
}
}
function animate() {
// dots[0] follows the mouse,
// though no dot is drawn there
var start = 0;
dots[0].X = Xpos;
dots[0].Y = Ypos;
start = 1;
for (i = start ; i < nDots; i++ ) {
var spring = new vec(0, 0);
if (i > 0) {
springForce(i-1, i, spring);
}
if (i < (nDots - 1)) {
springForce(i+1, i, spring);
}
// air resisitance/friction
var resist = new vec(-dots[i].dx * RESISTANCE,
-dots[i].dy * RESISTANCE);
// compute new accel, including gravity
var accel = new vec((spring.X + resist.X)/MASS + XGRAVITY,
(spring.Y + resist.Y)/ MASS + YGRAVITY);
// compute new velocity
dots[i].dx += (DELTAT * accel.X);
dots[i].dy += (DELTAT * accel.Y);
// stop dead so it doesn't jitter when nearly still
if (Math.abs(dots[i].dx) < STOPVEL &&
Math.abs(dots[i].dy) < STOPVEL &&
Math.abs(accel.X) < STOPACC &&
Math.abs(accel.Y) < STOPACC) {
dots[i].dx = 0;
dots[i].dy = 0;
}
// move to new position
dots[i].X += dots[i].dx;
dots[i].Y += dots[i].dy;
// get size of window
var height, width;
if (isNetscape) {
height = window.innerHeight + window.pageYOffset;
width = window.innerWidth + window.pageXOffset;
} else {
height = iecompattest().clientHeight + iecompattest().scrollTop-8;
width = iecompattest().clientWidth + iecompattest().scrollLeft;
}
// bounce off 3 walls (leave ceiling open)
if (dots[i].Y >= height - DOTSIZE - 1) {
if (dots[i].dy > 0) {
dots[i].dy = BOUNCE * -dots[i].dy;
}
dots[i].Y = height - DOTSIZE - 1;
}
if (dots[i].X >= width - DOTSIZE) {
if (dots[i].dx > 0) {
dots[i].dx = BOUNCE * -dots[i].dx;
}
dots[i].X = width - DOTSIZE - 1;
}
if (dots[i].X < 0) {
if (dots[i].dx < 0) {
dots[i].dx = BOUNCE * -dots[i].dx;
}
dots[i].X = 0;
}
// move img to new position
if (dead)
{
if (dots[i].curY < (height - DOTSIZE - 1))
{
dots[i].curY += 10;
}
dots[i].X = dots[i].curX;
dots[i].Y = dots[i].curY;
}
else
{
dots[i].curX = dots[i].X;
dots[i].curY = dots[i].Y;
}
dots[i].obj.left = dots[i].X;
dots[i].obj.top = dots[i].Y;
}
}
|
|
|
Вернуться к началу |
|
 |
_AntZ_
Зарегистрирован: 09.05.2008 Сообщения: 90 Откуда: Vladivostok, Russia
|
Добавлено: Вт Ноя 25, 2008 8:07 pm Заголовок сообщения: |
|
|
Цитата: | че-то она все-равно головой бьется и снизу... | Для того чтобы убрать нижнюю стенку, нужно удалить
Код: | if (dots[i].Y >= height - DOTSIZE - 1) {
if (dots[i].dy > 0) {
dots[i].dy = BOUNCE * -dots[i].dy;
}
dots[i].Y = height - DOTSIZE - 1;
} |
Цитата: | а вот в Мозилле ничего не поменялось.. | Ну, так нужно сделать с MoveHandler то же самое, т.е. добавить координаты. Попробуй заменить на это
Код: |
function MoveHandler(e)
{
Xpos = e.pageX + 20;
Ypos = e.pageY - 80;
return true;
}
|
|
|
Вернуться к началу |
|
 |
_AntZ_
Зарегистрирован: 09.05.2008 Сообщения: 90 Откуда: Vladivostok, Russia
|
Добавлено: Вт Ноя 25, 2008 8:13 pm Заголовок сообщения: |
|
|
Только, я думаю, если стенку нижнюю и убирать, то нужно все другие стенки убирать тоже. Иначе единообразия не будет. Ведь эти стенки нужны только для того, чтобы лишний скорллинг не появлялся по бокам и внизу. |
|
Вернуться к началу |
|
 |
LG.BALUKATION

Зарегистрирован: 05.08.2006 Сообщения: 141 Откуда: Saint-Patersburg
|
Добавлено: Вт Ноя 25, 2008 11:41 pm Заголовок сообщения: |
|
|
жесть, но теперь в Сафари на маке заработало... Тока она и впрямь как буд-то на резинке болтается - если курсором подёргать будет болтаться не хило вокруг. _________________ Zwei Drachen betrachten einander |
|
Вернуться к началу |
|
 |
Anton

Зарегистрирован: 10.11.2003 Сообщения: 727 Откуда: Киев
|
Добавлено: Ср Ноя 26, 2008 12:15 pm Заголовок сообщения: |
|
|
так раньше она в ИЕ тоже как на резинке болталась, никто не жаловался )
Оживить ее все-равно не получится, к курсору надо привязывать по-любому.
поковыряю еще.. ) |
|
Вернуться к началу |
|
 |
АнС RRC2008


Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Ср Ноя 26, 2008 2:47 pm Заголовок сообщения: |
|
|
Anton писал(а): | Оживить ее все-равно не получится, к курсору надо привязывать по-любому. |
Вот пример - метроид вполне реалистично летает по экрану (впрочем, реалистично для движений метроида, а не бабочки):
http://www.zebeth.com/planetzebeth/archive1k/index.html |
|
Вернуться к началу |
|
 |
Anton

Зарегистрирован: 10.11.2003 Сообщения: 727 Откуда: Киев
|
Добавлено: Ср Ноя 26, 2008 3:34 pm Заголовок сообщения: |
|
|
ну, метроид просто себе летает...
фею надо все-таки к мышке вязать - она ж в игре вокруг линка летает.
как по мне так щас нормально летает... |
|
Вернуться к началу |
|
 |
|